首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_sql_constraints和_constraints在OpenERP/Odoo上的区别?

_sql_constraints和_constraints在OpenERP/Odoo上的区别?
EN

Stack Overflow用户
提问于 2015-07-31 01:38:49
回答 1查看 6.5K关注 0票数 7

我注意到Odoo有两种约束。但是我想知道_sql_constraints和_constraints之间的区别是什么?

代码语言:javascript
复制
_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']),
]
EN

回答 1

Stack Overflow用户

发布于 2015-07-31 04:20:47

_sql_constraints意味着它将在postgresql数据库端设置约束。

代码语言:javascript
复制
_sql_constraints = [
     ('email_uniq', 'unique(email)', ' Please enter Unique Email id.'),
     ]

其中:

  • email_uniq的意思是约束名称
  • unique(email)的意思是unique是约束的名称。email是一个字段名,它的约束将应用于该字段。
  • 'Please enter Unique Email id.'是一条消息,当违反约束时,它将显示在弹出窗口上。

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

代码语言:javascript
复制
_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 python constraint有一个新的和更简单的装饰器。下面的示例可以这样编写:

代码语言:javascript
复制
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")
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31736799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档