2016-12-16 2 views
0

product.productモデルでOdoo V10のUIを使用して新しいフィールドを定義しました。フィールドは、このように定義されていますOdoo関連のフィールドが更新されない場合は、ストア= True

Name = x_sellable_inventory 
Type = float 
Readonly = true 
Dependencies = qty_available,outgoing_qty 

計算方法は次のとおりです。

for record in self: 
    record['x_sellable_inventory'] = record.qty_available - record.outgoing_qty 

私はビューにこのフィールドを追加し、上の手持ち在庫は、製品のために調整されている場合、それは正しく変更だことを確認しました。これまでのところすべてが期待どおりに機能しています。

ここではsale.order.lineからこの値にアクセスできるようにしたいので、sale.order.lineに関連するフィールドを作成してアクセスしました。

Name = x_product_sellable_inventory_new 
Type = float 
Readonly = true 
Stored = true 
Related Field = product_id.x_sellable_inventory 

このフィールドを販売注文ビューに追加して、注文ラインのリストに表示することができます。ツリー内の各注文行ごとに1回表示されます。

これで、製品の手持ち数量を変更すると、製品ビューではまだ正しく更新されますが、販売注文明細の値は決して変更されません。それが設定された最初の時間から変化することはありません。

Storeオプションのチェックを外すと、値が正しく更新されます。ここで何が起きてるの?関連するフィールドが格納されているかどうかはなぜ重要ですか? product_id.x_sellable_inventoryの値が変更されるたびに更新されるべきではありませんか?

答えて

0

私はここに私の問題は、私が依存関係として使用しようとしていたフィールドは、自分自身storedなかったことだったと思います。依存関係として正しく機能するためには、フィールドを格納する必要があると思われます。このモデルは、データベースに格納されているフィールドでない場合、従属フィールドが変更されたことを知る方法がありません。 qty_availableおよびoutgoing_qtyは、フィールドに格納されません。

2

デフォルトでは、計算フィールドは保存されません。あなたは知っている。これは、データをデータベースで使用できるようにする機能を実行できるようにする場合に問題となります。

これを修正するために、Odooは計算フィールドにstore = Trueフラグを提供します。

gotchaは、1回だけ発生することです。これを回避するには、関連フィールドまたはフィールドが変更されるたびにフィールドを更新させるために、@api.dependsデコレータ(@danideeおよび@CZoellnerの記載どおり)を使用する必要があります。

@api.dependsもフィールド名のコンマ区切りのリストを受け取ることができます。

@api.depends('field_name')

OR

@api.depends('field_name','another_field_name')

@api.one 
@api.depends('field2') 
def _compute_field1(self): 
    self.field1 = SOMETHING THAT OCCURS EVERY TIME `field2` CHANGES 


field1 = fields.Char(compute=_compute_field1,store=True) 
field2 = fields.Char() 
+0

ありがとうございます。私は '計算された'ではなく '関連する'フィールドについて質問しています。違いがありますか?これらのドキュメントによると:http://odoo-new-api-guide-line.readthedocs.io/en/latest/fields.html#related-fieldそれは言う: "ストアkwargを設定すると自動的に値をデータベースに格納します。新しいAPIを使用すると、関連するフィールドの値が自動的に更新されます。私はここで何が欠けていますか?さらに、 'store = True'の場合、計算されたフィールドへの依存関係が無関係であるという答えはありませんか?フィールドは自動再計算されないので、依存関係の変更は効果がありません。 – flyingL123

+0

ドキュメントが正しいかどうかわかりません。しかし、私はその原則はまだ立っていると信じていますこの回避策のいくつかのバリエーションを使用して、必要なフィールドを更新することができます。私の理解は、store = Trueは一度だけ発火するということです。どのようなドキュメントが言われているのかにかかわらず。 –

+0

依存関係は、格納された計算フィールドに対して何の目的も果たさないのですか?私はOdooには新しく、これらの複雑さをすべて学ぶことを試みています。ご協力ありがとうございました。 – flyingL123

関連する問題