odoo17模型之间的关系

many2one

在实践中,many2one 可以看作是表单视图中的下拉列表。

一个属性可以有一种类型,但可以将相同的类型分配给多个属性。many2one概念支持这一点。

many2one 是指向另一个对象的简单链接。例如,为了 res.partner 在我们的测试模型中定义一个链接,我们可以写:

partner_id = fields.Many2one("res.partner", string="Partner")

按照惯例,many2one 字段具有 _id 后缀。然后,可以通过以下方法轻松访问合作伙伴中的数据:

print(my_test_object.partner_id.name)

many2many

一个属性可以有多个标记,一个标记可以分配给许多属性。many2many 概念支持这一点。


many2many 是双向多重关系:一侧的任何记录都可以与另一侧的任意数量的记录相关联。例如,为了在测试模型上定义指向模型的 account.tax 链接,我们可以编写:

tax_ids = fields.Many2many("account.tax", string="Taxes")


按照惯例,many2many 字段具有 _ids 后缀。这意味着可以将几种税种添加到我们的测试模型中。它的行为为记录列表,这意味着访问数据必须在循环中完成:

for tax in my_test_object.tax_ids:
    print(tax.name)


记录列表称为记录集,即有序的记录集合。它支持对集合的标准 Python 操作,例如 len() 和 iter() ,以及额外的集合操作,例如 recs1 | recs2 。

one2many

many2one的概念可指同一属性可以有多个选项。 当有给定属性的报价列表,我们将使用 one2many 概念。


one2many 与 many2one 正好相反。例如,我们在测试模型上定义了一个指向 res.partner 模型的链接,这要归功于字段 partner_id 。我们可以定义反比关系,即链接到我们的合作伙伴的测试模型列表:

test_ids = fields.One2many("test_model", "partner_id", string="Tests")


第一个参数称为  comodel 协同模型第二个参数是我们要反转的字段。


通常,one2many 字段具有 _ids 后缀。它们表现为记录列表,这意味着访问数据必须在循环中完成:

for test in partner.test_ids:
    print(test.name)

 危险


由于 One2many 是虚拟关系,因此必须在comodel协同模型中定义一个 Many2one 字段。

注意

首先,我们不需要所有模型的操作或菜单。某些模型只能通过另一个模型访问。在我们的练习中就是这种情况:报价总是通过属性访问。
其次,尽管该 property_id 字段是必填字段,但我们没有将其包含在视图中。Odoo如何知道我们的报价与哪个属性相关联?这就是使用Odoo框架的魔力之一:有时事物是隐式定义的。当我们通过 one2many 字段创建记录时,为了方便起见,会自动填充相应的 many2one。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值