odoo中关联字段的使用

在 Odoo 中,关联字段是用于连接不同模型(数据库表)之间的关系的字段。主要有三种类型的关联字段:Many2oneOne2manyMany2many。此外,related 参数是用于直接访问关联记录中的字段而不需要额外的数据库查询。下面我们将逐一介绍这些关联字段的使用方法,包括 Python 和 XML 代码示例,并解释 XML 中关于关联字段的 widget 使用方法。

Many2one

Many2one 字段用于表示一个模型与另一个模型之间的多对一关系。例如,一个订单行(order line)属于一个订单(order)。

Python 代码示例:

from odoo import models, fields

class Order(models.Model):
    _name = 'order'
    _description = 'Order'

    name = fields.Char(string='Order Reference')

class OrderLine(models.Model):
    _name = 'order.line'
    _description = 'Order Line'

    name = fields.Char(string='Line Description')
    order_id = fields.Many2one('order', string='Order')
<field name="order_id" />

One2many

One2many 字段用于表示一个模型与另一个模型之间的一对多关系。它实际上是Many2one字段的反向关系。

from odoo import models, fields

class Order(models.Model):
    _name = 'order'
    _description = 'Order'

    name = fields.Char(string='Order Reference')
    order_line_ids = fields.One2many('order.line', 'order_id', string='Order Lines')
<field name="order_line_ids" widget="one2many_list" />

Many2many

Many2many 字段用于表示两个模型之间的多对多关系。例如,一个产品可以出现在多个订单中,而一个订单也可以包含多个产品。

from odoo import models, fields

class Order(models.Model):
    _name = 'order'
    _description = 'Order'

    name = fields.Char(string='Order Reference')
    product_ids = fields.Many2many('product', string='Products')

class Product(models.Model):
    _name = 'product'
    _description = 'Product'

    name = fields.Char(string='Product Name')
<field name="product_ids" widget="many2many_tags" />

关于 Related 参数

related 参数用于创建一个字段,其值与另一个模型中的字段相关联。这意味着当关联字段的值发生变化时,相关字段的值也会自动更新。它通常用于在视图中展示关联模型的信息,而无需进行额外的数据库查询。

from odoo import models, fields

class OrderLine(models.Model):
    _name = 'order.line'
    _description = 'Order Line'

    name = fields.Char(string='Line Description')
    order_id = fields.Many2one('order', string='Order')
    order_reference = fields.Char(string='Order Reference', related='order_id.name', readonly=True)

在上述例子中,order_reference 字段会自动显示其对应订单的参考编号(name 字段)。

XML 中关联字段的 Widget 使用方法

在 Odoo 的视图定义中,可以通过指定 widget 属性来改变关联字段的显示和行为方式。例如:

  • widget="many2many_tags": 使用标签显示Many2many字段。
  • widget="one2many_list": 以列表形式显示One2many字段。
  • widget="many2one": 显示为下拉列表,允许用户从中选择一个Many2one关联。

通过这些 widget,可以提高用户界面的交互性和可用性,使得数据的输入和查看更加直观和方便。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值