odoo中字段列举

Odoo常见字段

odoo中的常用字段,没有其他花哨的操作。

  • Char:Char用于字符串
  • Text:Text用于多行字符串值
  • Html:类似于Text的多选字符串值,但通常用于以HTML格式存储的富文本 
  • Boolean:Boolean存储布尔值,True/False。
  • Integer:Integer字段存储整型值。
  • Binary:Binary字段存储二进制文件,例如图像或文档。 

 

Selection

Selection用于选择列表。这是一个包含多个集合(每个集合中包含一个值和一个描述)的列表。所选择的值存储于数据库中,可以是字符串或整数。

Selection可以使用整型的健,但应注意odoo内部将0解释为未设置,不会显示存储值为0的描述。

Selection字段还接收一个函数引用来替代列表作为selection属性。这允许动态生成选项列表。

正常使用示例

state = fields.Selection([("draft", "草稿"), ("to_audit", "待审核"), ("audited", "已审核")], default="draft", string="状态")

动态生成选项列表示例

def gnrt_score(self):
    score_list = []
    for i in range(1, 11):
        score_list.append((str(i), str(i)))
    return score_list

score = fields.Selection(selection="gnrt_score", string="评分", help="评分应在1-10之间")

 

Float

Float字段存储浮点型数值。精度可由位数和小数位位数对来定义。 

length = fields.Float(string="长度", digits=(8, 3))。# 总长度为8位,小数位占3位

用户可以自定义浮点字段的精度,具体方法可参考我的另一篇博客:odoo之技巧合集一-使用可配置精度的浮点字段

 

Monetary

Monetary字段可存储某个币种的数量值。

使用示例

currency_id = fields.Many2one("res.currency", string="Currency")
retail_price = fields.Monetary(string="Retail Price", currency_field='currency_id')

<field name="currency_id" />
<field name="retail_price" />

 

Reference

引用字段,可以实现让用户自定义要引用的模型和记录。

@api.model  # 在模型级别而不是记录集级别上进行操作
def _referencable_models(self):
    models = self.env['ir.model'].search([])
    print("models:", models)
    return [(x.model, x.name) for x in models]

ref_doc_id = fields.Reference(selection='_referencable_models', string="Reference Document")

 

Date

Date存储日期值。它在数据库中以日期进行存储。ORM中以Python date对象的形式对其进行处理。所使用的格式在odoo.fields.DATE_FORMATE中定义。

Date字段对象的一些非常方便的工具方法:

  • fields.Date.to_date(string_value将字符串解析为⼀个date对象。
  • fields.Date.to_string(date_value)将Date对象表示为字符串。
  • fields.Date.today()以字符串格式返回当前⽇期。这适合⽤于默认值。
  • fields.Date.context_today(record, timestamp)根据记录(或记录集)上下⽂的时区以 字符串格式返回时间戳的⽇期(或者在省略时间戳时返回当天)。

 

Datetime

Datetime字段用于日期时间值。在数据库中以原生UTC时间datetime进行存储。ORM中以Python datetime对象的形式对其进行处理。所使用的格式在odoo.field.DATETIME_FORMATE中定义。

Datetime字段对象的一些非常方便的工具方法:

  • fields.Datetime.to_datetime(string_value)将字符串解析为datetime对象。
  • fields.Datetime.to_string(datetime_value)将datetime对象表示为字符串。
  • fields.Datetime.now()以字符串格式返回当天及当前时间。它适合⽤作默认值。
  • fields.Datetime.context_timestamp(record, timestamp)将时间戳原⽣datetime按照记 录上下⽂的时区转化为对应时区。它不适合⽤作默认值,但是在向外部系统发送数据等 操作时可以使⽤。

 

多对多字段 

Many2one

多对一字段,Many-to-one字段向模型的数据表中添加了⼀列,存储关联记录的数据库ID。在数据库级别
上,还会创建外键约束,确保保存的ID是对关联表中记录的有效引⽤ 。对这些关联字段不会 创建数据库索引,但这可通过添加 index=True 属性来进⾏完成。

publisher_id = fields.Many2one("res.partner", string="Publisher", ondelete="set null", context={}, domain=[], index=True)

 

One2many

一对多字段,One-to-many字段是many-to-one的反向关联,虽然one2many字段像其它字段⼀样添加在模型中,但在数据库中并没有实际的体现。他们仅是编程捷径,启⽤数据库视图来展现这些关联记录列表。

published_book_ids = fields.One2many("library.book", "publisher_id", string="Published Book")

 

Many2many

多对多字段,Many-to-many关联也不会向模型数据表添加列。这类关联在数据库中使⽤中间关联表进⾏ 体现,其中有两列分别存储这两个关联的ID。
Odoo⾃动处理这⼀关联表的创建。关联表的名称默认使⽤两个关联模型名按字⺟排序加上⼀
个_rel后缀来创建。但我们可以使⽤relation属性来进⾏覆盖。

authored_book_ids = fields.Many2many("library.book", relation="author_book_rel", column1="authored_book_ids", 
column2="author_ids", string="authored books")

column1:这是连接这个模型的关联表中的Many2one字段的名称
column2:这是在关联数据表中连接comodel的Many2one字段的名称

 

 

Odoo默认添加字段与特殊字段

Odoo默认添加字段

有些字段在odoo模型中默认添加,因此我们不应在字段中使用这些名称。这些是记录自动生成的标识符的id字段以及一些审计日志字段,如下所示:

  • create_date是记录创建的时间戳
  • create_uid是创建该记录的⽤户
  • write_date是最近记录的编辑时间戳
  • write_uid是最后编辑记录的⽤户

这些⽇志字段的⾃动创建可通过设置模型属性_log_access=False来进⾏禁⽤。

 

特殊字段:active

它应是布尔型字段,允许⽤将记录标记为⾮活跃 (inactive)。它的定义如下:

active = fields.Boolean('Active', default=True)

默认只有将active设置为True的记录才可⻅。要获取隐藏字段,我们需要使⽤域过滤器[(‘activ e’, ‘=’, False)]。⽽如果向环境上下⽂添加了’active_test’: False 值,ORM则不会过滤掉⾮活跃记录。

在有些情况下,你可能不能修改上下⽂来获取活跃及⾮活跃记录。这时,可以使⽤ [‘|’, (‘active’, ‘=’, True), (‘active’, ‘=’, False)] 域。 注意:[(‘active’, ‘in’ (True, False))]可能不会如你所预期那样。Odoo在域中显式地查找(‘active’, ‘=’, False)语句。它默认会限制仅搜索活跃记录。

 

上一篇:Elasticsearch 字段映射:动态mapping,显示mapping


下一篇:P6062 [USACO05JAN]Muddy Fields G 题解