模型之间的关系(Relations Between Models)
上一章介绍了为包含基本字段的模型创建自定义视图。然而,在任何真实的业务场景中,我们都需要不止一个模型。此外,模型之间的链接是必要的。人们可以很容易地想象一个模型包含客户,另一个模型则包含用户列表。你可能需要参考任何现有业务模型上的客户或用户。
在我们的estate模块中,我们需要有关房产的以下信息:
- 购买房产的客户
- 出售房产的真实重述代理人
- 房产类型:房子、公寓、顶层公寓、城堡…
- 显示了该酒店特色的一系列标签:舒适、翻新…
- 收到的报价清单
Many2one
参考: 本主题相关文档可查阅 Many2one
在我们的房地产模块中,我们想定义房地产类型的概念,例如,房屋或公寓。根据的类型对房地产进行分类是一种标准的业务需求,尤其是为了优化过滤。
一个房产可以有一个类型,但同一类型可以分配给多个房产。这得到了many2one
概念的支持。
many2one
是指向另一个对象的简单链接。例如,为了在我们的测试模型中定义到 res.partner
的连接,我们可以这样写:
partner_id = fields.Many2one("res.partner", string="Partner")
按约定,many2one
字段以_id
后缀。可通过以下方式轻松的访问partner
中的数据:
print(my_test_object.partner_id.name)
参见
练习1
添加房地产类型表
- 创建
estate.property.type
模型,并添加以下字段:
Field | Type | Attributes |
---|---|---|
name | Char | required |
-
添加菜单
-
添加
property_type_id
到estate.property
模型和表单,树,搜索视图
该练习是对前几章很好的扼要重述:你需要创建一个 model,设置 model,添加 动作和菜单,并且创建视图.
提示: 别忘记在 __init__.py
导入新的Python模块文件,并在__manifest.py__
中添加数据或者访问权限。
新增odoo14/custom/estate/models/estate_property_type.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from odoo import models, fields
class EstatePropertyType(models.Model):
_name = 'estate.property.type'
_description = 'estate property type'
name = fields.Char(string='type', required=True)
修改odoo14/custom/estate/models/__init__.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from . import estate_property
from . import estate_property_type # 新增内容
修改odoo14/custom/estate/security/ir.model.access.csv
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_estate_model,access_estate_model,model_estate_property,base.group_user,1,1,1,1
access_estate_property_type_model,access_estate_property_type_model,model_estate_property_type,base.group_user,1,1,1,1
修改odoo14/custom/estate/views/estate_menus.view
<?xml version="1.0"?>
<odoo>
<menuitem id="test_menu_root" name="Real Estate">
<menuitem id="test_first_level_menu" name="Advertisements">
<menuitem id="estate_property_menu_action" action="link_estate_property_action"/>
</menuitem>
<menuitem id="property_type_first_level_menu" name="Settings">
<menuitem id="property_type_action" action="estate_property_type_action"/>
</menuitem>
</menuitem>
</odoo>
新增odoo14/custom/estate/views/estate_property_type_views.xml
<?xml version="1.0"?>
<odoo>
<record id="estate_property_type_action" model="ir.actions.act_window">
<field name="name">Property Types</field>
<field name="res_model">estate.property.type</field>
<field name="view_mode">tree,form</field>
</record>
<record id="estate_property_type_view_tree" model="ir.ui.view">
<field name="name">estate.property.type.tree</field>
<field name="model">estate.property.type</field>
<field name="arch" type="xml">