3

私はこの質問を見て、openerpで同様の目標を達成するために使用しました。したがって、私の機能:

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None):
    res={}
    flag = False
    if result < lower or result > upper:
        flag = True
    res = {'warning': flag}
    return {'value': res}

そして、私が持っているビューでは:

<field name="result" on_change="onchange_warning(result, lower, upper)"/>  

ここで、resultlowerupperは float で、warningはデフォルト値のないブール値です。私のフォーム内のツリーには、lowerupperの両方に事前定義された値がありますが、結果null (0.00)であり、塗りつぶされるように設定されています。

機能はうまく機能し、本来の機能を果たします。ただし、実際には 0.0 に等しく、フラグを設定する必要がある結果の問題に直面していますが、フィールド値がデフォルト値の 0.00 から技術的に変更されていないため、 onchange関数 (D'Oh!) を実行できません。何をすべきか?

PS: ひどいタイトルで申し訳ありません。お気軽に改善してください :)

編集:

関数がどのようになるかを誰かが確認する必要がある場合:

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None):
    res={}
    flag = False
    if float(result) < lower or float(result) > upper:
        flag = True
    res = {'warning': flag}
    return {'value': res}

結果fields.charになりました

4

1 に答える 1

2

浮動小数点フィールドのデフォルトは常に 0.0 です。on_change は、値を変更するたびにのみ呼び出されます。

値が「0」のときに操作を実行する場合は、float の代わりに char フィールドを使用できます。on_change が呼び出されたときに値を文字列から浮動小数点数に変換する必要があり、その後さらに操作を行うことができます。

型キャスト コードを try except に入れて、except ブロックが実行されたときに例外を発生させることができます。

例:

def on_change_float(self, cr, uid, ids, test1, context=None):
    val = float(test1)
    except Exception:
        raise osv.except_osv('Input Error ! ', 'Please enter numbers.')
    return {'value': {'test1': val}}
于 2012-12-11T10:57:13.073 に答える