【问题标题】:How to use one function variable in another function of same class in openerp?如何在openerp的同一类的另一个函数中使用一个函数变量?
【发布时间】:2011-11-24 06:52:36
【问题描述】:

我在 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 中怎么可能?

【问题讨论】:

  • 请修正您的代码格式。每个缩进使用 4 个空格。不要混用制表符和空格。

标签: python openerp postgresql-9.1


【解决方案1】:

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

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

如果您确定要使用全局变量,您可能需要在两种方法中都将其声明为全局变量,并在onchange_evaluation_date() 方法中对其进行赋值。全局变量通常是一个坏主意,而类成员变量通常更好。然而,OpenERP 模型类是单例的,所以你通常不想持有任何状态。一切都应该通过方法参数进来。

【讨论】:

  • 感谢您的帮助,我有更多想法
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您必须在类中定义变量,并且可以通过调用 self.variable_name 在类中的任何函数中检索该数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2012-09-28
      • 2019-03-30
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多