跳转到主要内容

将列表字段以矩阵形式显示

项目描述

Production/Stable License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

此模块允许将x2many字段以三元组($x_value, $y_value, $value)在表格中显示

$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引用了一个具有x、y和value字段的模型。如果您的字段名称不同,请作为属性传递正确的名称

<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_value 将此字段显示为值

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

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

示例

您需要一个已经填充了值的数结构。假设我们想在允许用户为每个项目每个用户填写一个任务计划小时的向导中使用这个小部件。在这种情况下,我们可以使用 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_extra_attrs 参数支持每个字段单元格的额外属性。例如,我们可以将单元格设置为不可编辑、必填或只读。在只读情况下,也可以点击 m2o 打开相关记录。

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

  • 支持通过键盘箭头遍历单元格。

  • 通过按键盘上的 Shift+TAB 从后面进入小部件,将进入第 1 个单元格,直到 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

  • Onestein

贡献者

维护者

此模块由 OCA 维护。

Odoo Community Association

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

当前 维护者

ChrisOForgeFlow

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

欢迎您贡献力量。要了解如何做,请访问 https://odoo-community.org/page/Contribute

项目详情


下载文件

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

源代码发行版

此版本没有提供源代码发行版文件。请参阅有关生成发行版存档的教程。

编译后的发行版

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面