我需要做的是在保存之前访问某个模块中列的值。
例如,如果我们有一个像这样定义的模块:
_columns = {
'name': fields.char('Department Name', size=64, required=True),
'complete_name': fields.function(_dept_name_get_fnc, type="char", string='Name'),
'parent_id': fields.many2one('hr.department', 'Parent Department', select=True),
'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'),
'note': fields.text('Note'),
}
所有这些列都由控件(如文本框,组合框,复选框等)表示。
当我们在创建模式下打开表单视图时,正在创建一个新记录但未保存,并且在我们单击(保存)之前不会在数据库中获取id。
问题是如何在保存之前和当前记录获取新ID之前访问这些字段(控件)的值。
我知道self.browse和self.search但是他们需要一个因为记录尚未保存而无法使用的ID。
另外,我们可以分配一个可以从模块中的任何类访问的全局变量(Web开发术语中的会话变量)吗?
答案 0 :(得分:1)
如果要访问此字段,则需要覆盖orm的create方法。例如:
def create(self, cr, uid, vals, context=None):
name = vals.get('name')
complete_name = vals.get('complete_name') # like all others field if one2many field comes than this field access using for loop.
vals.update({'your_field_name': your_value_what_you_want_to_update_before_creating})
#vals.update({'name': 'Your Good Name'})
return super(your_class_name, self).create(cr, uid, vals, context)
def write(self, cr, uid, ids, vals, context=None):
print "\n\n\nCurrent Values =>", vals
name = vals.get('name')
print "\nCurrent Name => ", name
complete_name = vals.get('complete_name') # like all others field if one2many field comes than this field access using for loop.
#do all calculation as you want and store in local variable and that variable pass as a value. for example.
name = 'Your Good Name'
vals.update({'name': name})
print "\n\nUpdated Values => ", vals
return super(your_class_name, self).write(cr, uid, ids, vals, context)
希望这会对你有所帮助。
答案 1 :(得分:0)
更好地覆盖create方法,并使用您想要的方式。在你的对象中试试这个,这是一个例子,
def create(self, cr, uid, vals, context=None):
if vals.get('name','/')=='/':
vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/'
return super(sale_order, self).create(cr, uid, vals, context=context)
同样你可以从这里做自己的改变,看看“vals”和“context”的价值, 这会对你有所帮助。