实体关系

一个实体的数据可以关联到另一个实体的数据,例如:销售订单实体的数据关联到客户实体的数据,也关联到订单明细实体的数据。

实体关系练习:3-1

创建 Session 实体,一个Session是一个Course在特定时间,针对特定观众的一次授课;

Session实体有名称、开始日期、时长、座位数等属性;,添加操作和菜单以显示该实体的相关视图;

openacademy/models/models.py

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的数据,并且是必须的
  • 调整视图信息
  1. 为实体添加相关的Many2one字段;
  2. 将这些字段添加到视图中;

openacademy/models/models.py

openacademy/views/openacademy.xml

One2many关系练习:3-3

用 one2many 关系,修订 Course 和 Session 的关系。

  1. 修改 Course 的定义
  2. 修改对应的视图

openacademy/models/models.py

openacademy/views/openacademy.xml

Many2many关系练习:3-4

用 many2many关系,修订 Session 实体和 Attendees 实体的关系,Attendees是内置实体res.partner的数据。修订相应的视图。

  1. 修改 Session 类的定义
  2. 将字段添加到视图

openacademy/models/models.py

openacademy/views/openacademy.xml

更新模块

经过上述的实体关系和视图的调整,可以更新一下模块,看看运行的效果如何。如果更新了Model的定义,需要重新启动odoo,以便将实体更新。

  1. 进入odoo的 “Apps” 页面,搜索出 “OpenAcademy” 模块;
  2. 单击模块,查看模块的详细信息,可以通过 “Upgrade“ 按钮更新模块功能,或者通过 “Uninstall” 卸载该模块;

问题:为什么列表视图至少显示 4 条数据?

results matching ""

    No results matching ""