2017-10-18 20 views
2

pos.quotationモデルでは状態があります。だから私の目標は状態が変わるときです。私は、 "handed"という名前のshoes.orderのブール値フィールドがtrueに変わることを望みます。私は1つのモデルでそれをやっているなら、それをする方法を知っているが、他のモデルでフィールドを変更する必要があるときは苦労する。あなたは 何がデータベース層で発生しない値を変更する際のonchange自己中他のモデルのフィールド値を変更

class pos_quotation(models.Model): 
    _inherit = "pos.quotation" 

    @api.onchange('state') 
    def handed(self): 
     shoes = self.env['shoes.order'] 
     for rec in self: 
      if self.state == "delivery_success": 
       rec.shoes.handed = True 

答えて

1

は、ダミーのオブジェクトが含まれています。 (依存計算フィールドの反対)

ただし、元の値はself._originに渡されます。

@api.onchange('state') 
def handed(self): 
if self.state == "delivery_success": 
       # first try this if it work 
       self._origin.shoes.handed = True 

       # if not working then you need to fetch the recorod 
       # from the database first. 
       shoes = self.env['shoes.order'].search[('id', '=', self.shoes.id)] 

       shoes.handed = True 

が、のonchangeイベントでこれを行うことは、ユーザが を持っているいくつかの問題イメージングを引き起こす可能性が彼の心を変更し、キャンセルをクリックします(変更が捨てられる(上書き))が、 アルはデータベースにコミット準備shoes.handedです。

あなたのための私のpropsitionは、関連分野を使用することです。

class pos_quotation(models.Model): 
    _inherit = "pos.quotation" 

    # i'm assuming that your m2o field is shoes 
    # don't make readonly because you need to save it's changed value 
    # when you hit save. 
    handed = fields.Boolean(related="shoes.handed") 

    @api.onchange('state') 
    def handed(self): 
     if self.state == "delivery_success": 
       self.handed = True 

は、フォームビューにこのフィールドを追加し、それが 見えないだことを確認することを忘れないように、ユーザーが手動で値を更新しない

<field name="handed" invisible="1"/> 

あなたがアイデアを得たいと考えています。

関連する問題