zoukankan      html  css  js  c++  java
  • 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)语句。它默认会限制仅搜索活跃记录。

  • 相关阅读:
    iOS崩溃报告获取一
    GCDTimer
    Runtime
    Socket
    冒泡排序笔记
    学习java虚拟机笔记
    ftp发送文件包括中文名
    java email
    批量数据插入高效 转发
    读取本地硬盘文件,快速扫描插入 数据库
  • 原文地址:https://www.cnblogs.com/yifchan/p/14279736.html
Copyright © 2011-2022 走看看