在 Odoo 中,关联字段是用于连接不同模型(数据库表)之间的关系的字段。主要有三种类型的关联字段:Many2one、One2many 和 Many2many。此外,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,可以提高用户界面的交互性和可用性,使得数据的输入和查看更加直观和方便。
本文详细介绍了Odoo中Many2one、One2many和Many2many关联字段的用法,以及related参数的运用。通过Python和XML代码示例,展示了如何在视图中利用不同的widget提高用户界面的交互性。
1088

被折叠的 条评论
为什么被折叠?



