如何在openerp中的同一个类的另一个函数中使用一个函数变量?

时间:2011-11-24 06:52:36

标签: python openerp postgresql-9.1

我在fct1中有一个变量var_x。 我想在同一个类中的另一个函数fct2中使用相同的变量值 代码:

def onchange_blockcreate(self, cr, uid, ids, block):
    global family_code_id
    global varname        
    if block:
        cr.execute ('select activefrom,activeto from new_block where id=%s ',(block,))            
        family_code_id =cr.fetchone()[0]               
    msgalert = {'title':'Warning','message':}
    return {'warning':msgalert}
def onchange_evaluation_date(self, cr, uid, ids,family_code_id,activefrom):
    print activefrom
    print family_code_id
    if activefrom>=family_code_id:
        print activefrom          
    else :
        msgalert = {'title':'Warning','message':'fieldtocheck is too short!'}
        return {'warning':msgalert} 

这里在第一个函数中使用了family_code_id,我也希望在第二个函数中使用相同的family_code_id。但它显示错误:

  

未定义全局变量family_code_id。

在openerp中这怎么可能?

3 个答案:

答案 0 :(得分:0)

您可能可以使用全局变量,但通常有更好的方法。

我的第一个建议是将family_code_id字段传递给两个on_change事件。您是否担心两次通话之间客户端会发生变化?如果没有,只需在family_code_id方法中添加onchange_blockcreate()参数,然后将family_code_id添加到XML文件的on_change属性中的字段列表中。

如果您决定使用全局变量,则可能需要在两种方法中将其声明为全局变量,并使用onchange_evaluation_date()方法进行分配。全局变量通常是个坏主意,而类成员变量通常更好。但是OpenERP模型类是单例,所以你通常不希望保持任何状态。一切都应该通过方法参数进入。

答案 1 :(得分:0)

你必须在Lable类中定义该变量

喜欢---->全局family_code_id以及类标签然后它正常工作

答案 2 :(得分:0)

你必须在类中定义变量,你可以通过调用self.variable_name

来检索类中任何函数中的数据。