具有更好性能的约束

时间:2018-09-10 16:14:14

标签: odoo odoo-8 odoo-9

在我的模型中,每个产品的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中的约束应该在性能上更好一些,因为可以有成千上万的行。那么,有没有更好的解决方案呢?

1 个答案:

答案 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' );