odoo 模型字段


orm 各种字段及其属性

odoo model

odoo 提供了一个简单的机制来帮助建立一个新的空模块

$ odoo-bin scaffold <module name> <where to put it>
$ ./odoo-bin scaffold your_addons_name my-addons/

ORM

对象关系映射,基本可以理解为一个python对 数据库的驱动。这里的_name是从必须的。在数据库中就是表的名称。

from odoo import models
class MinimalModel(models.Model):
    _name = 'test.model'
    _description = 'Demo Odoo Tutorial'  # 只是一个描述,如果不写可能会出现警告。
    _inherit = ['mail.thread', 'mail.activity.mixin'] # 继承的那些模块,才有mail这个模块。

模型字段

字段用于定义模型可以存储的内容和存储位置。字段被定义为模型类上的属性

from odoo import models, fields
class LessMinimalModel(models.Model):
    _name = 'test.model2'
    # name = fields.Char()
    # 添加其他的属性,这里required为必填。
    name = field.Char(required=True)

所有字段都有一些属性可用,以下是最常见的属性:

  • string (unicode,默认:字段的名称)

    UI中字段的标签(用户可以看到)。

  • required (bool,默认:False)

    如果True,该字段不能为空,它必须具有默认值,或者在创建记录时始终被赋予一个值。

  • help (unicode,默认:'')

    长窗体,向UI中的用户提供帮助工具提示.

  • index (bool,默认:False)

    请求Odoo创建一个数据库索引列上。

简单字段

简单字段的示例包括Boolean, Date, Char.

保留字段

Odoo在所有模型中创建了几个字段。这些字段由系统管理,不应该写入。如果有用或必要可以查看。

  • id (Id)

    模型中记录的唯一标识符。

  • create_date (Datetime)

    记录的创建日期。

  • create_uid (Many2one)

    创建记录的用户。

  • write_date (Datetime)

    记录的最后修改日期。

  • write_uid (Many2one)

    上次修改记录的用户。

模型之间的关系

关系字段

关系字段链接记录,要么是同一个模型(层次结构),要么是不同模型之间的链接。

Many2one(other_model, ondelete='set null')

指向其他对象的简单链接

print foo.other_id.name

One2many(other_model, related_field)

虚拟关系,与Many2one。一个One2many作为一个记录容器,访问它会产生(可能是空的)一组记录:

for other in foo.other_ids:
    print other.name

注意:因为One2many是一种虚拟的关系必有一个Many2one字段中的other_model,以及它的名字必须是related_field

Many2many(other_model)

双向多重关系,一边的任何记录都可以与另一边的任意数量的记录相关联。作为一个记录容器,访问它还会导致一组可能为空的记录:

for other in foo.other_ids:
    print other.name

模型约束

Odoo提供了两种方法来设置自动验证的不变量:Python constraintsSQL constraints.

python 约束

Python约束定义为用constrains(),并在记录集中调用。修饰器指定约束中涉及哪些字段,以便在修改其中一个字段时自动计算约束。如果不满足该方法的不变量,则该方法将引发异常:

from odoo.exceptions import ValidationError

@api.constrains('age')  # 给出警告也是可以写入数据库的。
def _check_something(self):
    for record in self:
        if record.age > 20:
            raise ValidationError("Your record is too old: %s" % record.age)
    # all records passed the test, don't return anything

SQL 约束

SQL约束是通过模型属性定义的。_sql_constraints。后者被分配给一个字符串三元组的列表。(name, sql_definition, message),在哪里name是有效的SQL约束名称,sql_definition表约束表达,和message是错误消息。

# 指定 name 为唯一值
_sql_constraints = [
        ('name_uniq', 'unique(name)', 'Description must be unique'),
    ]

其他约束参考PostgreSQL文档


文章作者: theing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 theing !
评论
  目录