在我的模型中,每个产品的client_id必须为一个。因此,我想对此情况进行限制。
class ClientSystemCode(models.Model):
_name = 'client.system.code'
_description = 'Client System Code'
client_id = fields.Many2one('res.partner', 'Client')
product_id = fields.Many2one('product.template', 'Product')
client_sys_code = fields.Char('Client system code')
在product.template模型中,我的约束看起来像这样。
@api.constrains('client_system_code_ids')
def _client_system_code_constraint(self):
duplicates = []
for line in self.client_system_code_ids:
if line.client_id.id not in duplicates:
duplicates.append(line.client_id.id)
else:
raise ValidationError(_("Product can't have more than one client code with same client"))
可以,因为它是从产品表单视图触发的,并且总是没有太多行。但是client.system.code中的约束应该在性能上更好一些,因为可以有成千上万的行。那么,有没有更好的解决方案呢?
答案 0 :(得分:2)
您可以使用sql约束轻松完成它:
//these views use category
View::composer([ 'view1','view2'], 'App\Http\ViewComposers\MyComposerWithCategory' );
//these views don't
View::composer([ 'view3','view4'], 'App\Http\ViewComposers\MyComposerWithoutCategory' );