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

继续学习。

 

posted @ 2022-07-15 15:56  木_糖  阅读(155)  评论(0编辑  收藏  举报