Odoo12的数据库表约束变化时如何更新约束(_sql_constraints)
两种方式:
- 覆盖重写
举个例子:# odoo源码酱紫 _sql_constraints = [ ('code_and_name', 'UNIQUE(code,name)', _("Code and Name must be unique!")), ] # 现在变成了 code + company 唯一约束 # 如果哦我们不介意unique的在数据库中的名称 我们可以酱紫写 _sql_constraints = [ ('code_and_name', 'UNIQUE(code,company_id)', _("Code and Company must be unique!")), ] # 即名称相同,直接覆盖 可以取数据库中查看表的unique选项
- 查询删除并新增
# odoo源码酱紫(account.account) _sql_constraints = [ ('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !') ] # 查询删除并新增酱紫 # -*- coding: utf-8 -*- from odoo import _, api, fields, models, modules from odoo.exceptions import ValidationError import logging _logger = logging.getLogger(__name__) class AcountAccountInherit(models.Model): _inherit = 'account.account' @api.model_cr def init(self): # 删除Odoo源码 科目表的约束条件 cr = self.env.cr unique_name = 'account_account_code_company_uniq' table_name = 'account_account' cr.execute("""SELECT 1 from pg_constraint cs JOIN pg_class cl ON (cs.conrelid = cl.oid) WHERE cs.conname=%s and cl.relname=%s""", (unique_name, table_name)) if cr.fetchone(): cr.execute('ALTER TABLE "%s" DROP CONSTRAINT "%s"' % (table_name, unique_name), ) _logger.info('Dropped CONSTRAINT %s@%s', table_name, unique_name) # 新增新约束 _sql_constraints = [ ('code_and_account_structure', 'UNIQUE(code,account_structure_id)', _("Code and account structure must be unique!")), ]