OpenERP / Odoo上的_sql_constraints和_constraints之间的区别?

时间:2015-07-31 01:38:50

标签: python constraints odoo openerp-7 openerp-8

我注意到Odoo ERP有两种限制。 但是我想知道_sql_constraints和_constraints有什么区别?

_sql_constraints = {
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.')
}

_constraints=[
    (_check_qty_and_unitprice, u'Qty must be more than 0',['product_qty', 'cost_unit']),
]

1 个答案:

答案 0 :(得分:8)

_sql_constraints表示它将在postgresql数据库端设置约束。

_sql_constraints = [
     ('email_uniq', 'unique(email)', ' Please enter Unique Email id.'),
     ]

其中:

  • email_uniq表示约束名称,

  • unique(email)表示unique是约束的名称。 email是一个字段名称,该约束将应用于该字段。

  • 'Please enter Unique Email id.'是一条消息,当违反约束时,它会显示在弹出窗口中。

_constraints是python约束。我们可以给出设置约束的逻辑。例如:

_constraints = [
     (_check_qty_and_unitprice, u'Qty must be more than 0', ['product_qty', 'cost_unit']),
     ]

其中:

  • _check_qty_and_unitprice是我们需要应用逻辑的函数名称。

  • 'Qty must be more than 0'是一条消息,当违反约束时它将显示在弹出窗口中(python函数返回False)。

  • ['product_qty', 'cost_unit']是一个字段名称列表,表示将为这两个字段触发约束。

新的 Odoo API python constraint有一个新的更简单的装饰器。以下示例可以这样写:

from openerp.exceptions import ValidationError

@api.constraints('product_qty', 'cost_unit')
def _check_something(self):
    for record in self:
        if record.product_qty < 1:
            raise ValidationError("Qty must be more than 0")