跳转到主要内容

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

项目描述

License: AGPL-3

2D矩阵用于x2many字段

此模块允许在表中显示x2many字段,以3元组($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

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

field_value

将此字段显示为值

show_row_totals

如果field_value是数值字段,则计算行总计

show_column_totals

如果field_value是数值字段,则计算列总计

field_att_<name>

声明与HTML节点属性(disabled、class、style等)绑定字段值的选项,该属性以字符串作为前缀,称为选项中传递的 <name>

Try me on Runbot

示例

您需要一个已经填充了值的数结构。假设我们想要在一个向导中使用此小部件,该向导允许用户为每个项目每个用户填写一项任务的计划时间。在这种情况下,我们可以使用 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 选项和一个控制字段来控制矩阵中字段的编辑性。

已知问题/路线图

  • 尝试实例化适当的字段小部件并让它渲染输入将很有价值

错误跟踪器

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

致谢

贡献者

维护者

Odoo Community Association

此模块由OCA维护。

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

要为此模块做出贡献,请访问 https://odoo-community.org

项目详情


下载文件

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

源分布

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

构建分布

支持者

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