目录
根据以下表格添加房地产报价表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 ( | required | |
property_id | Many2one ( | 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")
最终要实现的效果如下:
还活着吗?这一章绝对不是最简单的一章。它引入了几个新概念,同时又依赖于之前介绍的所有内容。下一章会轻松一些,别担心;-)
上一篇 odoo17开发教程(12):模型之间的关系-多对多many2many_odoo many2many-CSDN博客
下一篇 odoo17开发教程(14):Computed Fields And Onchanges_odoo 17开发手册-CSDN博客