odoo动态设置树形视图中的字段,每个用户可定制自己要显示的字段

绿茶味的清风 2019-11-16 ⋅ 66 阅读

在Odoo中,树形视图(Tree View)是一种重要的数据展示方式,它可以帮助用户快速浏览和查找数据。然而,有时不同的用户对于所需字段的需求是不同的,因此通过动态设置让每个用户可以定制自己要显示的字段将大大提升用户体验和工作效率。

幸运的是,Odoo已经提供了相应功能供我们灵活定制树形视图中的字段。下面我们将介绍如何设置树形视图的动态字段,并让每个用户根据自己的需求进行自定义。

1. 创建一个模型表

首先,我们需要在Odoo中创建一个模型表。模型表可以是已存在的Odoo基础模块中的表,也可以是我们自己创建的自定义模块中的表。

2. 定义树形视图

接下来,我们需要定义树形视图(Tree View)。在自定义模块的视图文件中,添加如下代码块:

<record model="ir.ui.view" id="custom_tree_view">
    <field name="name">Custom Tree View</field>
    <field name="model">your.model.name</field>
    <field name="arch" type="xml">
        <tree>
            <!-- 默认显示的字段 -->
            <field name="field1"/>
            <field name="field2"/>
            <field name="field3"/>
            <!-- 自定义可选字段 -->
            <field name="dynamic_field_1" invisible="1"/>
            <field name="dynamic_field_2" invisible="1"/>
        </tree>
    </field>
</record>

在上述代码中,我们定义了一个名为"custom_tree_view"的树形视图。其中,"your.model.name"需要替换为实际模型表的名称。视图中的字段"field1"、"field2"和"field3"是默认显示的字段,而"dynamic_field_1"和"dynamic_field_2"是用户可自定义的字段。

3. 设置动态字段

在模型表中,我们需要添加动态字段的定义。这样才能使每个用户能够根据自己的需求对视图中的字段进行自定义。在模型表的Python文件中添加如下代码块:

from odoo import models, fields

class YourModelName(models.Model):
    _name = 'your.model.name'
    _description = 'Your Model Description'

    dynamic_field_1 = fields.Char(string='Dynamic Field 1')
    dynamic_field_2 = fields.Integer(string='Dynamic Field 2')

在上述代码中,我们添加了两个动态字段"dynamic_field_1"和"dynamic_field_2"。这些字段的类型可以根据实际需求进行调整,这里分别以Char和Integer类型为示例。

4. 给用户提供字段选择界面

为了实现用户自定义可选字段的功能,我们还需要在Odoo中提供一个用户界面供其选择。在自定义模块的视图文件中,添加如下代码块:

<record id="your_module_settings_view" model="ir.ui.view">
    <field name="name">Your Module Settings View</field>
    <field name="model">your.module.settings</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <button name="confirm_settings" string="Save" type="object" class="oe_highlight"/>
            </header>
            <sheet>
                <group>
                    <field name="selected_fields" widget="many2many_tags"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

上述代码中,我们定义了一个名为"your_module_settings_view"的界面,用于用户选择可选字段。其中的"your.module.settings"需要替换为实际模型表名+Settings。视图中的"selected_fields"字段用于存储用户选择的可选字段。

5. 添加用户自定义功能

在自定义模块的模型文件中,添加如下代码块:

from odoo import models, fields

class YourModuleSettings(models.TransientModel):
    _name = 'your.module.settings'
    _description = 'Your Module Settings'

    selected_fields = fields.Many2many('ir.model.fields', string='Selected Fields')

上述代码中,我们创建了一个名为"your.module.settings"的模型,用于存储用户选择的可选字段。

6. 加载动态字段

最后一步是在树形视图中加载用户选择的动态字段。打开模型表的Python文件,添加如下代码块:

from odoo import models, fields

class YourModelName(models.Model):
    _name = 'your.model.name'
    _description = 'Your Model Description'

    dynamic_field_1 = fields.Char(string='Dynamic Field 1')
    dynamic_field_2 = fields.Integer(string='Dynamic Field 2')

    @api.model
    def fields_view_get(self, view_id=None, view_type='tree', toolbar=False, submenu=False):
        result = super(YourModelName, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
        if view_type == 'tree':
            selected_fields = self.env['your.module.settings'].search([], limit=1).selected_fields
            for field in selected_fields:
                result['fields'][field.name]['arch_db_invisible'] = False
        return result

在上述代码中,我们重写了fields_view_get方法。通过查询"your.module.settings"模型,获取用户选择的可选字段,然后将这些字段通过设置arch_db_invisible来加载到树形视图中。

总结

通过以上步骤,我们成功实现了Odoo中树形视图中的动态字段设置功能。现在,每个用户都可以根据自己的需求定制所需显示的字段,大大提升了用户体验和工作效率。这是Odoo强大的自定义功能之一,为企业提供了更灵活、更个性化的数据展示方式。


全部评论: 0

    我有话说: