2017-06-05 18 views
2

如果创建新的或编辑产品,我想在供应商表中添加一个条目。每个产品都必须有一个供应商。 如果不选择供应商,系统必须给予警告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参数,如果它不符合要求,您应该警告用户纠正它,然后编辑实际记录。

尝试这样的事情

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

对不起,我还是没有真正理解什么你的意思。但是,当我试图将[如len(seller_ids)== 0:]替换为[如果vals ['seller_ids'] == False:],我的代码变得不起作用。 –

+0

如果用户没有填写'seller_ids',那么这个属性不会在'vals'中,只有在用户填写seller_ids或修改它时才可用。您可以调试以查看完整图像 –