Odoo模块开发教程3-模块继承之修改视图和数据第五讲
使用 mixin 类继承模型
原型继承主要用于支持 mixin 类。 mixin 是基于 models.Abstract 的抽象的模型(而不是
models.Model),它在数据库中没有实际的体现,而是提供功能供其它模型复用(混合 mixed in)。 Odoo 插件提供多种 mixin,最常的两种由 Discuss 应用(mail 模块)提供:
⚫ mail.thread 提供在许多文档表单下方或右侧的消息面板功能,以及消息和通知相关逻辑。
这在我们自己的模型中将经常会添加,下面就来一起学习下。
⚫ mail.activity.mixin 模型提供待办任务计划。
“ 注意: Odoo 11 的修改
mail 模块现在通过 mail.activity.mixin 抽象模型提供 Activities 任务管理功能。该功能在 Odoo
11 中才添加,此前的版本中没有。 ”
我们一起来为 Member 模型添加上述两种 mixin。社交消息功能由 mail 模块的 mail.thread
模型提供,要将其加入自定义模型,应进行如下操作:
⚫ 通过 mixin 模型 mail 为插件模块添加依赖
⚫ 让类继承 mail.thread 和 mail.activity.mixin 两个 mixin 类
⚫ 将 message_follower_ids, message_ids 和 activity_id 这些 mixin 的数据字段添加到表
单视图
对于第一步扩展模型需要在__manifest__.py 文件中添加对 mail 的依赖。
'depends': ['library_app', 'mail'],
第二步中对 mixin 类的继承通过_inherit 属性完成,应编辑library_member/models/library_member.py 并添加如下代码:
class Member(models.Model):
_name = 'library.member'
_description = 'Library Member'
_inherit = ['mail.thread', 'mail.activity.mixin']
...
通过添加额外的这行代码,我们的模型就会包含这些 mixin 的所有字段和方法。
第三步中向表单视图添加相关字段,编辑 library_member/views/member_view.xml 文件并在表单最后添加如下代码:
<odoo>
...
<form>
...
<!-- mail mixin fields -->
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"
/>
<field name="activity_ids" widget="mail_activity" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
mail 模块还为这些字段提供了一些特定的网页组件,以上代码中已使用到。在升级模块后会员
表单将变成这样:
有时普通用户仅能访问正在 follow 的记录。在这些情况下我们应添加访问记录规则来让用户可以看到 follow 的记录。本例中用不到这一功能,但可通过[(‘message_partner_ids’ , ‘in’ ,[user.partner_id.id])]或来进行添加。