odoo基础
1,增加按钮
使用odoo查询数据时,单单展示数据并不能满足我们的要求,有时需要在返回的数据增加按钮操作。
需求如图所示
之前用的方法,在返回的数据上,逐条加上按钮。即增加一个字段“操作” 类型为html,即是列名,然后重写search_read方法,对返回的数据进行遍历,逐条数据加上按钮:
代码片段如下
for i in records: rec.append({ 'id': i.get('id'), 'button': '<button type="button" class="list_pass btn-primary btn_radius mr5">通过</button>' '<button type="button" class="list_deny btn-primary btn_radius mr5">不通过</button>', 'type_name': i.get('type_name'), 'user_name': i.get('login'), 'link_url': url, 'check_type_status': i.get('check_type_status') })
后来学习发现一个简单的方法,在xml文件里直接添加
<record model="ir.ui.view" id=""> <field name="name"></field> <field name="model">模型名</field> <field name="arch" type="xml"> <tree> <button name="edit" type="object" string="编辑"></button> <button name="delete" type="object" string="删除"></button> <button name="select" type="object" string="查看"></button> <field name="" string="字段1"/> <field name="" string="字段2"/> <field name="" string="字段3"/> </tree> </field> </record>
在xml里添加的button标签中的name属性,指向模型中定义的方法,在方法里写逻辑就好啦,这里只用到了跳转页面
def edit(self): """ -编辑 """ return { 'type': 'ir.actions.act_window', 'res_model': '', 'view_type': 'form', 'view_mode': 'form', 'res_id': self.id, 'views': [(self.env.ref('').id, 'form')], 'target': 'main', 'context': {'form_view_custom_mode': 'edit'}, } def delete(self): """ 删除 """ self.search([('id', '=', self.id)]).unlink() def select(self): """ 查看 """ context = {} return { 'type': 'ir.actions.act_window', 'res_model': '', 'view_type': 'form', 'view_mode': 'form', 'res_id': self.id, 'views': [(self.env.ref('').id, 'form')], 'target': 'main', 'context': context, }
2,切换页面,form和tree视图嵌套
灵魂画手我自己,,上面是切换页面,中间是form视图,下面是tree视图
切换页面用的是page,分块用fieldset,字段两列展示分组用group,
<sheet> <notebook> <page string="页面1"> <fieldset class=""> <legend>块1</legend> <group> <group> <field /> <field /> <field /> </group> <group> <field /> <field /> <field /> </group> </group> </fieldset> <fieldset class=""> <legend>块2</legend> <field name="" class="" mode="tree" readonly="1"> <tree string="" default_order="id" limit="5" create="false" delete="false" edit="false"> <field name="" string="列1" readonly="1" style="pointer-events:none;"/> <field name="" string="列2" readonly="1" style="pointer-events:none;"/> <field name="" string="列3" readonly="1" style="pointer-events:none;"/> </tree> </field> </fieldset> </page> <page string="页面2"> <fieldset class=""> <legend>块1</legend> </fieldset> <fieldset> <legend>块2</legend> </fieldset> </page> <page string="页面3"> <fieldset class=""> </fieldset> </page> </notebook> </sheet>
3,字段值的自动计算
在上述form表单中,其中一个字段a的值,等于下面嵌套的tree视图列表中某一列b的和。
@api.onchange() 监测变化 def _count(self): form = self.search([('id', '=', self.id)]) 查询到当前form表单的数据 tree = form.xxx_ids 根据form的关联关系,找到tree中所有数据 self.字段a = 0 for i in tree: 遍历列表计算a的值 self.字段a += i.字段b
继续学习。