2017-06-05 1 views
2

商品を新規作成または編集する場合は、サプライヤテーブルにエントリを追加したいと考えています。各製品にはサプライヤが必要です。 「あなたは、サプライヤーの詳細を入力する必要があり、少なくとも1つの」ここ サプライヤーが選択されていない場合、システムは警告を与えなければならないOdoo - 空の値を持つフィールドを編集するときに警告を出す

は私のコードです:

class warning_supplier(models.Model): 
_inherit = 'product.template' 

@api.multi 
def write(self, vals): 
    res = super(warning_supplier, self).write(vals) 
    supplier_id = self.env['res.partner'].search([('name','=','No Supplier')]) 
    for this in self: 
     seller_ids = this.seller_ids 
     if len(seller_ids)==0: 
      raise Warning('You should fill in the supplier details, at least one.') 
    return res 

私は製品、コードを作成する場合正しく動作します。

しかし、私が製品を編集すると、&は選択されたサプライヤを削除してもそれ以上は機能しません。

誰かが私にエラーを指摘できますか?ありがとう!


編集:制約を使用して修正されました。

答えて

2

のようなものを試してみてください。制約の詳細については

class product_template(models.Model): 
    _inherit = 'product.template' 

    @api.multi 
    @api.constrains('seller_ids') 
    def onchange_seller(self): 
     for record in self : 
      if not record.seller_ids : 
       raise ValidationError("You should fill in the supplier details, at least one.") 
     return 

click here

+0

これを追加すると、今すぐ製品を正しく作成できません。サプライヤを追加しても、警告が表示されます。 –

+0

可能であれば、あなたの質問にあなたのコードを追加してください。 –

0

製品を作成するときは、create関数が呼び出され、編集時には常にwriteが機能します。

作成時にはvalsのパラメータをチェックしてください。要件を満たしていない場合は、ユーザーに修正するよう警告してから実際のレコードを編集してください。

は、あなたが与えられたフィールドが変更されたときに実行されるPythonの制約を追加することができます。この

# For example boolean 
if vals["myBoolean"] == False: 
    raise Warning('myBoolean should be true always!') 
+0

私はまだ本当にあなたが何を意味する理解して申し訳ありませんでした。しかし、[if len(seller_ids)== 0:]を[vals ['seller_ids'] == False:]に置き換えようとしたとき、私のコードは動作しなくなりました。 –

+0

ユーザが 'seller_ids'を記入しなかった場合、このアトリビュートは' vals'にはありません。ユーザが 'seller_ids'を埋めるか、それを変更した場合にのみ利用可能になります。デバッグしてフルイメージを表示することができます –

関連する問題