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

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)

Bha*_*dra 9

_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)