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

0 投票
3 回答
1744 浏览
提问于 2025-04-17 06:58

我在函数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

你需要在类里面定义这个变量,然后在类里的任何一个函数中都可以通过调用 self.variable_name 来获取这个数据。

0

你需要在类 Lable 中定义那个变量。

就像这样 ----> global family_code_id,同时在类 label 中也要定义,这样它才能正常工作。

0

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

我首先建议你把 family_code_id 这个字段传递到两个 on_change 事件里。你担心在这两个调用之间它会在客户端发生变化吗?如果不担心,那就给 onchange_blockcreate() 方法加一个 family_code_id 参数,并在你的 XML 文件的 on_change 属性中把 family_code_id 加到字段列表里。

如果你还是想用全局变量,那你可能需要在两个方法里都声明它为全局变量,并在 onchange_evaluation_date() 方法里给它赋值。全局变量通常不是个好主意,类的成员变量通常更好。不过,OpenERP 的模型类是单例的,所以你通常不想保存任何状态。所有的东西都应该通过方法参数传入。

撰写回答