Odoo中的字段

Odoo 字段类型及常用属性详解

在Odoo中,字段是定义模型结构的基本单元。了解不同类型的字段及其常用属性对于开发和定制Odoo应用程序至关重要。以下是一些常用的字段类型及其属性的详细介绍。

一:基本字段类型
  1. Binary

    • 用于保存图片、视频、文件、附件等,在视图层显示为一个文件上传按钮。
    • 容量限制:最多能容纳20MB内容。
      attachment = fields.Binary(string="附件")
      
  2. Char

    • 字符型,size属性定义字符串长度。
      name = fields.Char(string="名称", size=100)
      
  3. Boolean

    • 布尔型。
      is_active = fields.Boolean(string="是否激活")
      
  4. Float

    • 浮点型,digits定义数字总长和小数部分的位数。
      rate = fields.Float('Relative Change rate', digits=(12, 6))
      
  5. Integer

    • 整型。
      age = fields.Integer(string="年龄")
      
  6. Date

    • 短日期,年月日,在视图层以日历选择框显示。
      birth_date = fields.Date(string="出生日期")
      
  7. Datetime

    • 时间戳。
      created_at = fields.Datetime(string="创建时间")
      
  8. Text

    • 文本型,多用于多行文本框,可以用widget属性为它添加样式。
      description = fields.Text(string="描述", widget="textarea")
      
  9. Html

    • Text类似,用于多行文本编辑,自带编辑器样式,并且会把内容以HTML解析。
      content = fields.Html(string="内容")
      
  10. Selection

    • 下拉列表,枚举类型。
      status = fields.Selection([
          ('draft', '草稿'),
          ('confirmed', '已确认'),
          ('done', '完成')
      ], string="状态", default='draft')
      
二:关联字段类型
  1. One2one (一对一关系)

    • 格式为:fields.One2one(关联对象Name, 字段显示名, ... )
    • 在V5.0以后的版本中不建议使用,而是用many2one替代。
      partner_id = fields.One2one('res.partner', string='合作伙伴')
      
  2. Many2one (多对一关系)

    • 格式为:fields.Many2one(关联对象Name, 字段显示名, ... )
    • 可选参数有:
      • ondelete:当所引用的数据被删除时采取的操作,取值:'set null''restrict''cascade'
      • auto_join:在搜索该字段时是否自动生成JOIN条件,默认False
      • delegate:设置为True时可以通过当前model访问目标model的字段,与_inherits功能相同。
      category_id = fields.Many2one('product.category', string='类别', ondelete='set null')
      
  3. One2many (一对多关系)

    • 格式为:fields.One2many(关联对象Name, 关联字段, 字段显示名, ... )
    • 参数列表:
      • comodel_name:目标模型名称。
      • inverse_name:在comodel_name中对应的Many2one字段。
      • limit:在读取时限制数量。
      line_ids = fields.One2many('sale.order.line', 'order_id', string='订单行')
      
  4. Many2many (多对多关系)

    • 格式为:fields.Many2many(关联对象Name, 关联表, column1, column2, 字段显示名, ... )
    • 参数列表:
      • comodel_name:目标模型名称。
      • relation:关联的model在数据库存储的表名。
      • column1:与relation表记录相关联的列名。
      • column2:与relation表记录相关联的列名。
      • limit:在读取时限制数量。
      tag_ids = fields.Many2many('res.partner.category', 'res_partner_category_rel', 'partner_id', 'category_id', string='标签')
      
三:引用类型
  1. Related 字段

    • 通过当前模型的某个关联类型字段的某个字段带出值。
      partner_name = fields.Char(related='partner_id.name', store=True)
      
  2. Reference 字段

    • related更高级的引用字段,可以指定该字段引用哪些模型范围内的模型的哪些字段的值,范围更广。
      ref_model = fields.Reference(selection=[('res.partner', 'Partner'), ('product.product', 'Product')], string='引用')
      
四:Odoo保留字段
  1. name (Char)

    • _rec_name的默认值,在需要用来展示的时候使用。
      name = fields.Char(string="名称")
      
  2. active (Boolean)

    • 设置记录的全局可见性,当值为False时通过searchlist获取不到。
      active = fields.Boolean(string="激活", default=True)
      
  3. sequence (Integer)

    • 可修改的排序,可以在列表视图里通过拖拽进行排序。
      sequence = fields.Integer(string="顺序")
      
  4. state (Selection)

    • 对象的生命周期阶段,通过fieldsstates属性使用。
      state = fields.Selection([
          ('draft', '草稿'),
          ('confirmed', '已确认'),
          ('done', '完成')
      ], string="状态", default='draft')
      
  5. parent_id (Many2one)

    • 用来对树形结构的记录排序,并激活domain表达式的child_of运算符。
      parent_id = fields.Many2one('res.partner', string='父级')
      
  6. parent_left, parent_right

    • _parent_store结合使用,提供更好的树形结构数据读取。
      _parent_store = True
      parent_left = fields.Integer(string='Left Parent', index=True)
      parent_right = fields.Integer(string='Right Parent', index=True)
      
五:自动化属性

在模块安装后,模块中的类会自动添加一些属性,这些属性是Odoo自动化添加与修改的。如果不想为model自动添加这些属性,可以在类中通过_auto = False来关闭自动化属性。

class MyModel(models.Model):
    _name = 'my.model'
    _auto = False
六:Compute 字段

compute字段不是一种字段类型,而是指某个字段的值是计算出来的。定义格式如下:

field_name = fields.Type(compute="function_name", store=True)

@api.depends('dependent_field')
def function_name(self):
    for record in self:
        record.field_name = computed_value

示例:

total_amount = fields.Float(string="总金额", compute="compute_total_amount", store=True)

@api.depends('price', 'quantity')
def compute_total_amount(self):
    for record in self:
        record.total_amount = record.price * record.quantity

通过这些字段类型和属性的灵活运用,可以构建出功能丰富且高效的Odoo应用程序。希望这些示例和解释对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

odoo实施

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值