2017-01-18 9 views
0

請求書の検証後に、請求書に関連する "SaleOrder"クラスの "invoice_status"フィールドを修正したいとします。私は「SaleOrder」クラスから「名前」フィールドは「起源」と関連していることに気づいodoo 9の別のクラスの選択フィールドを変更するにはどうすればよいですか?

@api.multi 
def invoice_validate(self): 
    ... 

請求書の検証は、アカウントモジュール内、「AccountInvoice」クラスで定義されています"AccountInvoice"クラスのフィールド。

だから、私はこのようなinvoice_validate機能修正:何らかの理由で

@api.multi 
def invoice_validate(self): 
    for invoice in self: 
     ... 
     origin = self.origin 
     sale_order_id = self.env['sale.order'].search([('name', '=', origin)])[0].id 
     sale_order_obj = self.env['sale.order'].browse(sale_order_id) 
     sale_order_obj.write({'invoice_status': 'invoiced'}) 
    return self.write({'state': 'open'}) 

を、書き込みPARTEは動作しません。

SaleOrderクラスから "invoice_status" 欄の正式な定義です:

invoice_status = fields.Selection([ 
    ('upselling', 'Upselling Opportunity'), 
    ('invoiced', 'Fully Invoiced'), 
    ('to invoice', 'To Invoice'), 
    ('no', 'Nothing to Invoice') 
    ], string='Invoice Status', compute='_get_invoiced', store=True, readonly=True, default='no') 

答えて

1

計算フィールドであるため、invoice_statusの値を設定することはできません。値を設定したとしても、それが依存するフィールドが変更されたときに再計算され、最終的にはそれが持つべき値を見つけ出し、あなたの代わりにその値を書き出します。

オードゥーは動作するようにしました(注文が請求されたときに請求されます)。だから私はあなたがそれを実際にする必要はないと思う。値を保存する必要がある場合は、そのフィールドを変更してもう計算されないようにするか、別のフィールドを作成する必要があります。

+0

はい、私は、フィールドが変更されているフィールドが変更された場合、フィールドが再計算されることを知っていますが、請求書の有効性を確認する際に、その販売注文または請求書を変更することはなく、invoice_statusフィールドにその値を設定します。あなたの答えは私にはっきりと分かります。ありがとう – MouTio

+1

ボタンをクリックすると、レコードの書き込みがトリガーされます。 'sale.order'のフィールドがinvoice_id(参照)に依存しているとします。参照された請求書の書面を呼び出すたびに、そのフィールドの計算が開始されます。最後の行( 'return self.write({'state'; 'open'})')では、レコードを書き込んだ後に計算が行われ、値はあなたが望まない値に変更されます。 – Majikat

0

は、Selectionクラスのselection_add属性を確認してください。

あなたは同じモデルから継承する別のクラスでそれを再定義し、このようにそれを宣言する必要が選択フィールドにいくつかの項目を追加したい場合は、次の

invoice_status = fields.Selection(selection_add=[("state", "open")]) 

Selectionクラスのドキュメントをチェックし、を検索あなたのコードベースにselection_addがあります。

+0

あなたの答えをありがとうが、それはポイントではありません。私は選択項目に新しい項目を追加したくありません。私はそれ自身の値の別の値でそれを修正したいです。帰りの部分を避けて、それはあなたを混乱させています。私は値 "invoiced"(すでに存在する)を "invoice_status"フィールドに設定したいと思います。 – MouTio

関連する問題