0

海伊佛兹...

当在 one2many 中选择相同的产品时,我没有得到如何引发异常。

在销售订单行中-> Order_line 当我选择一种产品时,例如 Book&pen

在其他时候,当我选择相同的产品(Book&pen)时,它会同时引发异常。当我保存销售订单时,可能会出现错误。但是一次就想要。。

S.NO 产品数量 UOM

1 [FINAL-0001] GDFB-H-035-XL 1.0000 单位

2 [FINAL-0001] GDFB-H-035-XL 1.0000 单元

请任何人帮我解决这个问题......在此先感谢......

4

1 回答 1

0



在sale.order.line模型 中,您可以通过 2 种方式进行操作:

  1. 使用 @api.constrains 装饰器。
  2. 重写写入/创建函数。

这是每种方式的代码示例:

  1. 使用 @api.constrains :
    from openerp.exceptions import ValidationError
        @api.constrains('product_id')
        def constr(self):
            a=0
            for rec in self.order_id.order_line:
                if (rec.product_id.id == self.product_id.id) and (rec.id !=  self.id):
                    a=a+1
            if a > 1:
                raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
  1. 使用覆盖写入/创建功能:
@api.multi
def write(self,vals):
    if 'product_id' in vals :
        prod = self.env['product.product'].browse([vals.get('product_id')])
    else:
        prod = self.product_id

    for line in self.env['sale.order'].browse([self.order_id.id]).order_line:
        if (prod.id == line.product_id.id) and line.id !=  self.id:
            raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
    return super(sale_order_line,self).write(vals)

@api.model
def create(self,vals):
    for line in self.env['sale.order'].browse([vals['order_id']]).order_line:
        if (vals.get('product_id') == line.product_id.id) and line.id !=  self.id:
            raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
    return super(sale_order_line,self).create(vals)


谢谢你的问题
最好的问候。

于 2018-06-18T11:25:55.083 回答