实体关系
一个实体的数据可以关联到另一个实体的数据,例如:销售订单实体的数据关联到客户实体的数据,也关联到订单明细实体的数据。
实体关系练习:3-1
创建 Session 实体,一个Session是一个Course在特定时间,针对特定观众的一次授课;
Session实体有名称、开始日期、时长、座位数等属性;,添加操作和菜单以显示该实体的相关视图;
openacademy/views/openacademy.xml
备注:
digits=(6, 2)
指定了精度的浮点数:6 表示位数,2 表示小数位数,说明小数点左侧可以有 4 位数字。
关联字段
关联字段关联到实体数据,不论是同一实体还是不同实体。关联关系有以下几种关系:
- Many2one(other_model, ondelete='set null') 简单连接到一个对象,参见:外键
print foo.other_id.name
- One2many(other_model, related_field) 是一种“虚(Virtual)关系”,是Many2one的反向关联,访问该字段将返回一个数据集合
for other in foo.other_ids:
print other.name
警告:由于One2many是一种“虚关系”,所以在other_model中必须有关联关系为Many2one的 related_field 字段。
- Many2many(other_model) 双向的多重关联关系,每侧的实体的一条数据都与另一侧实体的任意数量的数据关联,访问该字段可能返回一个空集合。
for other in foo.other_ids:
print other.name
Many2one关系练习:3-2
用 many2one 关联关系修改 Course 和 Session 的实体关系,以及与其他实体的关系:
- 一个 course 有一个负责的用户,该字段的值是内置实体
res.users
的数据- 一个 session 有一个指导员,该字段的值是内置实体
res.partner
的数据- 一个 session 对应一个 course ,该字段的值是实体
openacademy.course
的数据,并且是必须的- 调整视图信息
- 为实体添加相关的
Many2one
字段;- 将这些字段添加到视图中;
One2many关系练习:3-3
用 one2many 关系,修订 Course 和 Session 的关系。
- 修改 Course 的定义
- 修改对应的视图
Many2many关系练习:3-4
用 many2many关系,修订 Session 实体和 Attendees 实体的关系,Attendees是内置实体
res.partner
的数据。修订相应的视图。
- 修改 Session 类的定义
- 将字段添加到视图
更新模块
经过上述的实体关系和视图的调整,可以更新一下模块,看看运行的效果如何。如果更新了Model的定义,需要重新启动odoo,以便将实体更新。
- 进入odoo的 “Apps” 页面,搜索出 “OpenAcademy” 模块;
- 单击模块,查看模块的详细信息,可以通过 “Upgrade“ 按钮更新模块功能,或者通过 “Uninstall” 卸载该模块;
问题:为什么列表视图至少显示 4 条数据?