跳转到主要内容

将列表字段显示为矩阵

项目描述

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

此模块允许在表格中显示具有3元组($x_value, $y_value, $value)的x2many字段

$x_value1

$x_value2

$y_value1

$value(1/1)

$value(2/1)

$y_value2

$value(1/2)

$value(2/2)

其中 value(n/n) 是可编辑的。

示例用例可以是:选择一些项目和员工,以便经理可以轻松地为每位员工填写一个任务的计划时间。结果可能如下所示

Screenshot

这个模块的优点在于,您可以使用此小部件具有任意数量的列,而要实现标准x2many列表中的此类功能,则需要一些相当复杂的技巧。

目录

用法

通过以下方式使用此小部件

<field name="my_field" widget="x2many_2d_matrix" />

这假设my_field指向一个具有字段xyvalue的模型。如果您的字段名称不同,请作为属性传递正确的名称

<field name="my_field" widget="x2many_2d_matrix" field_x_axis="my_field1" field_y_axis="my_field2" field_value="my_field3">
    <tree>
        <field name="my_field"/>
        <field name="my_field1"/>
        <field name="my_field2"/>
        <field name="my_field3"/>
    </tree>
</field>

您可以传递以下参数

field_x_axis

指示一个点的x值的字段

field_y_axis

指示一个点的y值的字段

field_label_x_axis

使用另一个字段在表格标题中显示

field_label_y_axis

使用另一个字段在表格标题中显示

field_value

将此字段显示为值

show_row_totals

如果field_value是数值字段,则表示是否要计算行总计。默认为True

show_column_totals

如果 field_value 是数值字段,表示是否要计算列总计。默认为 True

field_att_<name>

按照需要使用此字符串声明 disabledhidden 选项,以便将字段值与传递给选项的 <name> 所表示的 HTML 节点属性绑定。

示例

您需要一个已经填充了值的的数据结构。假设我们想在允许用户为每个项目每个用户填写一项任务的计划小时数的向导中使用此小部件。在这种情况下,我们可以使用 project.task 作为我们的数据模型,并在我们的向导中指向它。关键部分是在默认函数中填写字段。

from odoo import fields, models

class MyWizard(models.TransientModel):
    _name = 'my.wizard'

    def _default_task_ids(self):
        # your list of project should come from the context, some selection
        # in a previous wizard or wherever else
        projects = self.env['project.project'].browse([1, 2, 3])
        # same with users
        users = self.env['res.users'].browse([1, 2, 3])
        return [
            (0, 0, {
                'name': 'Sample task name',
                'project_id': p.id,
                'user_id': u.id,
                'planned_hours': 0,
                'message_needaction': False,
                'date_deadline': fields.Date.today(),
            })
            # if the project doesn't have a task for the user,
            # create a new one
            if not p.task_ids.filtered(lambda x: x.user_id == u) else
            # otherwise, return the task
            (4, p.task_ids.filtered(lambda x: x.user_id == u)[0].id)
            for p in projects
            for u in users
        ]

    task_ids = fields.Many2many('project.task', default=_default_task_ids)

现在在我们的向导中,我们可以使用

<field name="task_ids" widget="x2many_2d_matrix" field_x_axis="project_id" field_y_axis="user_id" field_value="planned_hours">
    <tree>
        <field name="task_ids"/>
        <field name="project_id"/>
        <field name="user_id"/>
        <field name="planned_hours"/>
    </tree>
</field>

请注意,矩阵中的所有值都必须存在,因此如果不存在,您需要预先创建它们,但您可以通过 field_att_disabled 选项和控件字段来控制矩阵中字段的可编辑性。

已知问题/路线图

  • 通过 field_extra_attrs 参数支持每个字段单元的额外属性。例如,我们可以将单元格设置为不可编辑、必填或只读。在只读情况下,还可以点击 m2o 打开相关记录。

  • 支持限制矩阵中的总记录数。参考:https://github.com/OCA/web/issues/901

  • 支持通过键盘箭头在单元格之间进行遍历。

  • 通过在键盘上按 Shift+TAB 从后端进入小部件将进入第一个单元格,直到 https://github.com/odoo/odoo/pull/26490 合并。

  • 支持每个单元格内的额外不可见字段。

  • 支持看板模式。当前行为强制为列表模式。

变更日志

12.0.1.0.1 (2018-12-07)

  • [修复] 单元格无法正确渲染。(#1126

12.0.1.0.0 (2018-11-20)

  • [12.0][迁移] web_widget_x2many_2d_matrix(《#1101》)

错误追踪器

在 GitHub Issues 上跟踪错误。如果遇到问题,请检查是否已报告您的问题。如果您是第一个发现它的,请通过提供详细的、受欢迎的 反馈 帮助我们解决这个问题。

请勿直接联系贡献者以获取支持或帮助解决技术问题。

致谢

作者

  • Therp BV

  • Tecnativa

  • Camptocamp

  • CorporateHub

贡献者

维护者

本模块由 OCA 维护。

Odoo Community Association

OCA,或 Odoo 社区协会,是一个非营利组织,其使命是支持 Odoo 功能的协作开发并推广其广泛应用。

本模块是 GitHub 上的 OCA/web 项目的组成部分。

欢迎您贡献力量。有关如何贡献的信息,请访问 https://odoo-community.org/page/Contribute

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

本发布没有可用的源代码分发文件。请参阅生成分发存档的教程

构建分发

支持