Odoo ERP开发入门第二课,如何添加自定义按钮。
传统ERP单据界面,都对应着很多按钮如:增删改查、审核、弃审等。Odoo原生模块主打简洁易用,按钮动作可能满足不了某些个性化需求,则需要我们自定义按钮及动作、或者扩展继承原模块按钮。
本小节主要学习按钮的视图标签,及按钮如何关联业务逻辑的Python方法。
案例需求:
增加表头按钮“是否转正”,点击修改“转正”属性
增加smart按钮“转正”,根据转正属性设置是否可见
增加smart按钮,关联显示“薪酬”记录值
效果预览:

1、视图层:修改XML文件按钮
可以设置在标签、标签中
中添加:常规按钮样式,一般定义为流程相关的动作

中添加:smart按钮样式,更美观,一般定义为快速查看、修改关联记录的动作

name 属性,关联动作名称
type 属性,按钮类型,单击按钮调用哪里的动作
object:调用python模型类对应name的方法
action: 调用xml文件中定义的name动作
attrs: 动态属性,仅影响当前字段,常用属性是invisible隐藏或显示按钮,domain语法
groups :可用用户组权限
XML部分代码
1"Teacher Form" > 2 3 "jwerp_action_teacher_regular" type="object" string="是否转正" class="oe_highlight" /> 4 header> 5 <sheet> 6 <div class="oe_button_box" name="button_box"> 7 <button name="jwerp_action_teacher_regular" 8 type="object" 9 class="oe_stat_button"10 icon="fa-globe icon"11 attrs="{'invisible': [('is_regular', '=', True)]}">12 o_field_widget o_stat_info">13 o_stat_text">转正14 15 16 jwerp_module.action_window"17 type="action"1819 class="oe_stat_button"20 icon="fa-pencil-square-o" >2122 salary" widget="statinfo" string="薪酬"/>23 24 2、模型层:修改 Model类
1from odoo import models, fields, api
2
3
4class Teacher(models.Model):
5 _name = 'jwerp_module.teacher'
6 _description = "JwERP/Teacher"
7
8 name = fields.Char(string="名字", index=True, required=True, )
9 age = fields.Integer(string='年龄')
10 is_regular = fields.Boolean(string="转正", default=False)
11 salary = fields.Float(string="薪酬", digits=(10, 2))
12 title = fields.Selection([
13 ("primary senior","正高级"),
14 ("senior", "高级"),
15 ("first grade", "一级"),
16 ("second grade", "二级"),
17 ("third grade", "三级"),
18 ("no", "无")
19 ], string="职称", default="no")
20
21 _sql_constraints = [('name_unique', 'unique(name)', 'A Name can only have one Teacher.')]
3、业务逻辑层:模型的python类方法:
方法内实现相关业务逻辑,实现修改teacher 的 is_regular属性值。
方法名“jwerp_action_teacher_regular” 和XML的name关联。
此处方法没有用odoo的api装饰器,调用方法时self指向上下文关联的model类实例,可直接对实例属性修改、查询。如果用@api.model装饰器,则方法的self不指向特定实例。
1def jwerp_action_teacher_regular(self):
2 print('修改前转正 %s' % self.is_regular)
3 self.write({'is_regular' : not self.is_regular})
4 print('修改后转正 %s' % self.is_regular)
5 return True
API参考:
https://www.odoo.com/documentation/14.0/reference/views.html#generic-structure
https://www.odoo.com/documentation/14.0/reference/views.html#semantic-components
课程回顾:
(原创)【odoo开发】入门第一课
强烈推荐一套开源ERP、电子商务和网站

关注公众号,
更多资讯早知道!
体验用户:demo
MiMa:demodemo
体验地址
阅读原文