案例来自《odoo快速入门与实战》第六章,本文章仅记录学习过程
docker exec -ti -u root odoo /bin/bash
odoo scaffold bug-manage /mnt/extra-addons
安装新模块在前端完成,登录odoo系统
(1)进入开发者模式:设置——》激活开发者模式
(2)点击更新应用列表后点击更新
(3)搜索“bug”,点击安装(坑:要叉掉“应用”,因为这里是内置应用,直接搜索自己创建的是搜索不到的,下面会更改这个配置)
后续对模块进行修改,只需要先更新应用列表,再升级即可。
通过一个为bug管理系统添加图标这个小例子查看升级的功能
1.在bug-manage项目下面创建路径/static/description,将图标放在改路径下(http://fontawesome.dashgame.com或者https://www.iconfont.cn/中找)
2.重启odoo,并刷新模块,即可看到图标
模型用于描述业务对象,如:订单、凭证等,通过继承odoo模板的python类进行增强扩展实现。创建了模型后,odoo会通过ORM引擎在数据库自动建表。
功能:维护bug列表,每个bug均包括描述信息和是否完成的标注,后续慢慢添加一些bug关闭等功能
在models文件夹中创建bug.py文件,代码如下:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class bug(models.Model):
# 类的唯一标志字段,其他类可以通过此字段引用本类
_name = 'bm.bug'
# 类似于标签
_description = 'bug'
# 该字段是特殊字段,name作为标题,required=True表示为必输字段
name = fields.Char('bug简述', required=True)
# 文本字段,size定义其长度为150
detail = fields.Text(size=150)
# 布尔字段,定义bug是否关闭
is_closed = fields.Boolean('是否关闭')
# 关闭理由,Selection可完成列表效果,第一个参数为列表内元素,第二个string属性用于定义字段标签
close_reason = fields.Selection([('changed', '已修改'), ('cannot', '无法修改'), ('delay', '推迟')], string='关闭理由')
# 允许选择用户作为bug负责人,多对一关系
user_id = fields.Many2one('res.users', string='负责人')
# 允许选择多个关注者,多对多关系
follower_id = fields.Many2many('res.partner', string='关注者')
常用属性:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class follower(models.Model):
_inherit = 'res.partner'
bug_ids = fields.Many2many('bm.bug', string='bug')
可以知道:
# -*- coding: utf-8 -*-
from . import bugs
from . import follower
视图:前端界面,通过xml文件定义
建立views/bugs.xml
<odoo>
<data>
<record model="ir.actions.act_window" id="bug-manage.action_window">
<field name="name">bug-manage windowfield>
<field name="res_model">bm.bugfield>
<field name="view_mode">tree,formfield>
record>
<menuitem name="bug管理系统" id="bug-manage.menu_root"/>
<menuitem name="bug管理" id="bug-manage.menu_1" parent="bug-manage.menu_root"/>
<menuitem name="bug列表" id="bug-manage.menu_1_list" parent="bug-manage.menu_1" action="bug-manage.action_window"/>
data>
odoo>
配置视图文件,在__manifest__.py文件增加配置:
'data': [
# 'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
'views/bugs.xml'
],
注意:
因为name是特殊字段,可用来代表一条记录。但是我们还需要添加更多字段信息,即创建自己的列表视图(list/tree)
在窗口动作的定义前加入:
<record model="ir.ui.view" id="bug-manage.list">
<field name="name">bug列表field>
<field name="model">bm.bugfield>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="is_closed"/>
<field name="user_id"/>
tree>
field>
record>
升级模块后可以看到列表已经出现了定义的三个字段:
点击创建,可以看到自动出现的表单:
接下来,对这个默认表单重新设计
普通表单视图与刚刚的列表视图很相似,只是将与互换,然后加上
还是在views/bugs.xml添加(刚刚的列表视图之后,窗口动作之前):
<record model="ir.ui.view" id="bug-manage.form">
<field name="name">bug表单</field>
<field name="model">bm.bug</field>
<field name="arch" type="xml">
<form>
<!--出现在表单上方,name对应未来后台方法-->
<header>
<button name="do_close" type="object" string="关闭bug"/>
</header>
<!--表单主体部分-->
<sheet>
<group name="group_top" col="2">
<group name="group_left">
<field name="name"/>
<field name="user_id"/>
<field name="is_closed"/>
</group>
<group name="group_right">
<field name="close_reason"/>
<field name="follower_id"/>
</group>
</group>
<notebook>
<page string="详细内容">
<field name="detail"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
还是在views/bugs.xml添加(刚刚的表单视图之后,窗口动作之前):
<record model="ir.ui.view" id="bug-manage.search">
<field name="name">bug搜索field>
<field name="model">bm.bugfield>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="is_closed"/>
<field name="user_id"/>
search>
field>
record>
搜索视图一般会与预定义筛选条件一起使用,这部分结合后端视图一起介绍
关注者是在"res.partner"模型的基础上增加bug列表(bug_id)字段,所以关注者的视图也继承自“res.partner”的视图进行修改。
步骤:
新建views/follower.xml,具体代码:
还需要一个菜单进入表单视图
在__manifest__.py文件引入本文件