use*_*766 7 python constraints openerp-7 openerp-8 odoo
我注意到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']),
]
Run Code Online (Sandbox Code Playgroud)
_sql_constraints 意味着它将在postgresql数据库端设置约束.
_sql_constraints = [
('email_uniq', 'unique(email)', ' Please enter Unique Email id.'),
]
Run Code Online (Sandbox Code Playgroud)
哪里:
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']),
]
Run Code Online (Sandbox Code Playgroud)
地点:
_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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |