Odoo开发之向模型中添加字段

Posted by Ethan on 2019-08-21

向模型中添加字段

  • 我们将添加几个字段到academy.partner模型,包括添加一个布尔类型的字段instructor
    在model文件夹下面创建一个文件名称为partner.py文件(即创建training_academy/models/partner.py文件),该文件包含一个用于对之前某个原来的类进行继承和扩展的类,具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-

from odoo import api, fields, models


class Partner(models.Model):
_inherit = 'res.partner'

op_type = fields.Selection([(1, '老师'), (2, '学生'), (3, '负责人')], string='类型')
instructor = fields.Boolean(string="讲师")
subject_ids = fields.One2many('academy.subject', 'partner_id', string="科目")
tea_session_ids = fields.One2many('academy.session', 'teacher_id', string="教授课程")
stu_session_ids = fields.Many2many('academy.session', string="参加课程")

类的属性_inherit是关键字:它告诉Odoo,这个类是从类名为academy.partner类继承。
注意这里不再需要_name属性。因为这个属性已经从父模型(类)继承下来。

  • 接下来在model文件夹里面还需要创建一个__init__.py文件,代码如下:
1
2
3
# -*- coding: utf-8 -*-

from . import partner

视图修改

  • 使用<xpath>在视图中添加元素
1
2
3
4
5
6
7
8
<field name="arch" type="xml">
<xpath expr="//field[@name='email']" position="after">
<field name="op_type" attrs="{'invisible': [('instructor', '=', True)]}"/>
<field name="instructor" widget="checkbox"/>
<field name="tea_session_ids" widget="many2many_tags"/>
<field name="stu_session_ids" widget="many2many_tags"/>
</xpath>
</field>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<field name="arch" type="xml">
<xpath expr="//field[@name='category_id']" position="after">
<field name="op_type" attrs="{'invisible': [('instructor', '=', True)]}"/>
<field name="instructor" widget="checkbox"/>
</xpath>
<xpath expr="//page[@name='sales_purchases']" position="after">
<page string="负责科目信息" attrs="{'invisible': [('op_type', '!=', 3)]}">
<field name="subject_ids" readonly="1"/>
</page>
<page string="教授课程信息" attrs="{'invisible': [('instructor', '=', False), ('op_type', '!=', 1)]}">
<field name="tea_session_ids" readonly="1"/>
</page>
<page string="参加课程信息" attrs="{'invisible': [('op_type', '!=', 2)]}">
<field name="stu_session_ids" readonly="1"/>
</page>
</xpath>
</field>
  • 最后,在__manifest.py__文件中加入视图文件
1
2
3
4
'data': [
...
'views/partner_views.xml',
],

至此,就可以执行模块升级操作了。