0

amountPayユーザーがフォームで入力したinterestTypeフィールドに応じて、支払いの利息を計算しようとしています。ユーザーが送信を押したら、興味のあるフィールドに挿入する必要がありますamountPay * 0.05

問題は、 as interestis でfunction fieldあり、現在のamountPayおよびinterestTypeレコードの値を検索しますが、それらの値がまだ保存されていないために失敗します。

保存後にフィールドを編集して再度保存すると、正しい関心が得られることに気付きました。

送信を1回押すだけで、その場でこれを行う方法はありますか?

正しい方向へのヒントは大歓迎です、ありがとう!

4

1 に答える 1

1

私の理解が正しければ、入力フィールドとしてフォームに amountPay フィールドと InterestType フィールドがあります。Interest が機能フィールドの場合、フォームが表示されるたびに (ロード時、保存後など)、計算された機能フィールドの値が表示されますが、on_change を使用して必要なことを行うことができます。

amountPay フィールドと InterestType フィールドの両方に on_change を追加します。これにより、これら 2 つのフィールドを渡す同じ on_change メソッドを呼び出すことができます。

on_change メソッドで、正しい利息を計算し、このように返します。

def on_change_interest_fields(self, cr, uid, ids, amountPay, interestType, context):
    interest = amountPay * 0.5
    return {'value': {'interest': interest,},}

対象フィールドは読み取り専用の機能フィールドですが、フォームに保持されている値は、値ディクショナリで返される値に変更されます。次に、ユーザーがフォームを保存または再ロードすると、機能フィールドが適切に計算されて表示されます。この方法の唯一の欠点は、機能フィールドで使用されるロジックを複製していることです。これを解決するには、機能フィールドによって呼び出されるメソッドからロジックを引き出して、機能フィールド メソッドと on_change メソッドの両方から呼び出すことができる別のメソッドにします。

最後にマイナーな点として、python は Java ではないことを覚えておいてください。PEP008 と OpenERP の規則に従うには、フィールドを amount_pay と interest_type にする必要があります。

于 2013-07-12T02:25:49.637 に答える