odoo17开发教程(13):模型之间的关系-One2many一对多

本文介绍了如何在Odoo17的房地产模块中定义房产出价概念,使用One2many关系存储多个出价,并创建包含价格、合作伙伴和状态的表单视图。开发者需在estate_property模型中添加offer_ids字段,并创建EstatePropertyOffer子模型。
摘要由CSDN通过智能技术生成

目录

根据以下表格添加房地产报价表estate_property_offer

代码实践 


在房地产模块中,我们要定义房产出价的概念。房产出价是潜在买家向卖家提出的金额。出价可以低于或高于预期价格。

一个出价适用于一处房产,但同一房产可以有多个出价。many2one 的概念再次出现。不过,在这种情况下,我们希望显示给定房产的出价列表,因此我们将使用 one2many 概念。

one2many 是 many2one 的倒数。例如,我们在测试模型中通过 partner_id 字段定义了一个指向 res.partner 模型的链接。我们可以定义反向关系,即链接到我们的合作伙伴的测试模型列表:

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 字段。

根据以下表格添加房地产报价表estate_property_offer

Field

Type

Attributes

Values

price

Float

status

Selection

no copy

Accepted, Refused

partner_id

Many2one (res.partner)

required

property_id

Many2one (estate.property)

required

  • 创建树形视图和包含价格、合作伙伴 ID 和状态字段的表单视图。无需创建操作或菜单。
  • 如本节目标所示,将 offer_ids 字段添加到 estate.property 模型及其表单视图中。

代码实践 

在estate_property模型中添加以下字段:

offer_ids = fields.One2many("estate_property_offer", "property_id", string="Offers")

新增estate_property_offer表:

class EstatePropertyOffer(models.Model):
    _name = "estate_property_offer"
    _description = "Estate Property Offer"

    price = fields.Float()
    status = fields.Selection([
        ("accepted", "Accepted"),
        ("refused", "Refused"),
    ],copy=False)
    partner_id = fields.Many2one("res.partner")
    property_id = fields.Many2one("estate_property")

最终要实现的效果如下:

Property offers

还活着吗?这一章绝对不是最简单的一章。它引入了几个新概念,同时又依赖于之前介绍的所有内容。下一章会轻松一些,别担心;-)

上一篇 odoo17开发教程(12):模型之间的关系-多对多many2many_odoo many2many-CSDN博客

下一篇 odoo17开发教程(14):Computed Fields And Onchanges_odoo 17开发手册-CSDN博客

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值