openerp中的全局变量和上下文

时间:2014-02-03 13:08:37

标签: openerp

我需要做的是在保存之前访问某个模块中列的值。

例如,如果我们有一个像这样定义的模块:

_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开发术语中的会话变量)吗?

2 个答案:

答案 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”的价值, 这会对你有所帮助。