文章目录
创建 estate.property.type 模型并添加字段:
摘要:
本文将介绍odoo模型里面的多对一关系关系,many2one。
引言:
上一章介绍了为包含基本字段的模型创建自定义视图。然而,在任何实际业务场景中,我们都需要不止一个模型。此外,模型之间的链接也是必要的。我们可以轻松想象一个模型包含客户,另一个模型包含用户列表。您可能需要在任何现有业务模型上引用客户或用户。
正文:
在我们的房地产模块中,我们需要房地产的以下信息:
- 购买房产的客户
- 出售房产的房地产经纪人
- 房产类型:住宅、公寓、顶层公寓、城堡......
- 描述房产特征的标签列表:舒适、翻新...
- 收到的报价清单
到文章的结尾,我们将完成以下功能:
新的 estate.property.type 模型应与相应的菜单、操作和视图一起创建。
应在 estate.property 模型中添加三个 Many2one 字段:房产类型、买方和卖方。
多对一(Many2one)
在房地产模块中,我们要定义房产类型的概念。例如,房产类型是指房屋或公寓。根据物业类型对物业进行分类是一种标准的业务需求,尤其是为了细化筛选。
一个属性可以只有一种类型,但同一类型可以分配给多个属性。many2one 概念支持这一点。
many2one 是指向另一个对象的简单链接。例如,为了在测试模型中定义一个指向 res.partner 的链接,我们可以这样写:
partner_id = fields.Many2one("res.partner", string="Partner")
按照惯例,many2one 字段的后缀是 _id。这样,访问伙伴中的数据就很容易了:
print(my_test_object.partner_id.name)
创建 estate.property.type 模型并添加字段:
Field | Type | Attributes |
---|---|---|
name | Char | required |
修改我们之前创建的models/estate_property.py
from odoo import models, fields, api
from dateutil.relativedelta import relativedelta
class EstateProperty(models.Model):
_name = "estate_property"
_description = "Estate Property"
def _get_default_date_available(self):
# 使用 fields.Date.today() 获取当前日期,并添加三个月
return fields.Date.today() + relativedelta(months=+3)
name = fields.Char(required=True, default="Unknown")
description = fields.Text()
postcode = fields.Char()
date_available = fields.Date(copy=False, default=_get_default_date_available)
expected_price = fields.Float(required=True)
selling_price = fields.Float(readonly=True, copy=False)
bedrooms = fields.Integer()
living_area = fields.Integer()
facades = fields.Integer() # 外墙
garage = fields.Boolean()
garden = fields.Boolean()
garden_area = fields.Integer()
garden_orientation = fields.Selection([
("north", "North"),
("south", "South"),
("east", "East"),
("west", "West"),
])
active = fields.Boolean(default=True)
state = fields.Selection([
("new", "New"),
("offer_received", "Offer Received"),
("offer_accepted", "Offer Accepted"),
("sold", "Sold"),
("canceled", "Canceled"),
], default="new", copy=False)
property_type_id = fields.Many2one("estate_property_type", string="Property Type")
class EstatePropertyType(models.Model):
_name = "estate_property_type"
_description = "Estate Property Type"
name = fields.Char(required=True)
upgrade你的模块
现在你就能看到房产类型的选项了,如何配置房产类型,
我们下一篇我们将介绍多对多,多对一的关系。
上一篇 odoo17开发教程(10):自定义搜索-CSDN博客
下一篇 odoo17开发教程(12):模型之间的关系-多对多many2many_odoo many2many-CSDN博客