跳转到主要内容

以矩阵形式显示列表字段

项目描述

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

此模块允许在表格中显示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指向一个具有字段 xyvalue 的模型。如果您的字段名称不同,请作为属性传递正确的名称

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

您可以传递以下参数

field_x_axis

指示一个点的x值的字段

field_y_axis

指示一个点的y值的字段

field_label_x_axis

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

field_label_y_axis

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

x_axis_clickable

表示X轴是否允许通过点击导航到字段(如果它是many2one字段)。默认为True

y_axis_clickable

指示Y轴是否允许点击以导航到字段(如果是many2one字段)。默认为True

field_value

以值显示此字段

show_row_totals

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

show_column_totals

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

field_att_<name>

声明与所需数量相同的以该字符串为前缀的选项,用于将字段值绑定到HTML节点属性(disabled、class、style等),称为通过选项传递的<name>

示例

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

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, {'project_id': p.id, 'user_id': u.id, 'planned_hours': 0})
           # 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" />

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

已知问题/路线图

  • 尝试实例化适当的字段小部件,并让它渲染输入

  • 让小部件处理完整笛卡尔积的缺失值,而不是被迫预先填充所有可能的值。

  • 如果您通过onchange传递值,则需要重写模型的方法onchange,以便小部件可以正常工作

@api.multi
def onchange(self, values, field_name, field_onchange):
    if "one2many_field" in field_onchange:
        for sub in [<field_list>]:
            field_onchange.setdefault("one2many_field." + sub, u"")
    return super(model, self).onchange(values, field_name, field_onchange)

错误跟踪器

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

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

鸣谢

作者

  • Therp BV

  • Tecnativa

贡献者

维护者

此模块由OCA维护。

Odoo Community Association

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

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

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

项目详情


下载文件

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

源分发

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

构建分发

支持