sql_cosntraints 在原始模块的现有字段上

sql_cosntraints on exitsing field from original module

在 product.template 中有字段 default_code。是否可以添加 sql_constraints 默认代码应该是唯一的。因为这段代码不起作用。或者我需要覆盖我的服装模块中的 default_code 字段吗?

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


 _sql_constraints = [
    ('code_uniq', 'unique (default_code)', "Default code already exists!"),
]

我会在模型 product.product 上添加约束,因为这是真正使用此信息(产品参考)的地方。但是 default_code on product.template 仅适用于 Odoo V10。在 Odoo V8 和 V9 中它是一个未存储的相关字段,所以在 DB 中不是。所以你必须在模型 product.product.

上添加约束
class ProductProduct(models.Model):
    _inherit = 'product.product'

    _sql_constraints = [
        ('code_uniq', 'unique(default_code)', "Default code already exists!"),
    ]

重要提示:如果设置约束的模块在约束失败时更新(例如 default_code 实际上在 db 中两次),它不会创建 sql 数据库中的约束。所以你必须清理数据并再次更新模块或自己在数据库中创建约束。

  • 请尝试使用 Python 限制可能对您有用:
  • 在 python 文件中导入此行:

    from openerp.exceptions import ValidationError

  • 任何在你的class中写这个方法:

    @api.constrains('default_code') def _check_default_code(self): code = self.search([('default_code','=',self.default_code)]) if len(code) > 1: raise ValidationError(_("Duplicate Record"))