0

fct1 に変数 var_x が 1 つあります。同じクラスコードの別の関数 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 は最初の関数で使用されていますが、2 番目の関数でも同じ family_code_id を使用したいと考えています。しかし、それはエラーを示しています:

グローバル変数 family_code_id が定義されていません。

これはopenerpでどのように可能ですか?

4

3 に答える 3

0

おそらくグローバル変数を使用できますが、通常はもっと良い方法があります。

私の最初の提案は、family_code_idフィールドを両方のon_changeイベントに渡すことです。2 つの呼び出しの間にクライアントで変更されることを心配していますか? そうでない場合は、メソッドにfamily_code_idパラメーターを追加し、XML ファイルの属性のフィールドのリストに追加します。onchange_blockcreate()family_code_idon_change

グローバル変数を使用することに決めた場合は、おそらく両方のメソッドでそれをグローバルとして宣言し、メソッドに割り当てる必要がありますonchange_evaluation_date()。一般に、グローバル変数はお勧めできません。通常、クラス メンバー変数の方が優れています。ただし、OpenERP モデル クラスはシングルトンであるため、通常は状態を保持する必要はありません。すべてがメソッド パラメーターを介して入力される必要があります。

于 2011-11-25T22:42:50.850 に答える
0

クラスLableでその変数を定義する必要があります

----> グローバル family_code_id のように、クラスラベルと同様に、適切に機能します

于 2011-12-01T13:18:02.263 に答える
0

クラス内で変数を定義する必要があり、self.variable_name を呼び出すことにより、クラス内の任意の関数でそのデータを取得できます。

于 2012-03-02T07:34:46.903 に答える