我注意到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']),
]
答案 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")