如何在 Odoo 16 中对 Many2Many 字段使用 Group by

Many2many 字段与 Many2one 字段类似,因为它们在模型之间建立了新的关系。在Odoo 16中,您无法按 many2many 字段分组,因为可以使用 many2many 记录选择任何记录。当您使用 many2many 字段给出 group by 过滤器时,您将遇到断言错误。 

介绍如何在 Odoo 16 中使用 Many2Many 字段组。 

这里我将使用已经存在的 tag_ids many2many 字段。如下面的代码所示:

.py 

tag_ids = fields.Many2many('crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id', string='Tags')

.xml 

<record id="view_sales_order_filter" model="ir.ui.view">
   <field name="name">sale.order.view.list.inherit.module.name</field>
   <field name="model">sale.order</field>
   <field name="inherit_id" ref="sale.view_sales_order_filter"/>
   <field name="arch" type="xml">
       <xpath expr="//search/group/filter[@name='customer']" position="after">
           <separator/>
           <filter name="tag_ids" string="Tags" domain="[]" context="{'group_by': 'tag_ids'}"/>
           <separator/>
       </xpath>
   </field>
</record>   

可以使用 Many2many 字段进行 group_by 筛选。如果我们计算字段,这是可行的,但如果 many2many 字段中的值为 2,则它将以逗号 (,) 显示,如 tag1、tag2 等,因为它是一个字符字段。

.py

product_tags = fields.Char(string='Tags', compute='_get_tags', store=True)
@api.model
@api.depends('tag_ids')
def _get_tags(self):
   for rec in self:
       if rec.tag_ids:
           product_tags = ','.join([p.name for p in rec.tag_ids])
       else:
           product_tags = ''
       rec.product_tags = product_tags

.xml 

<record id="view_sales_order_filter" model="ir.ui.view">
   <field name="name">sale.order.view.list.inherit.module.name</field>
   <field name="model">sale.order</field>
   <field name="inherit_id" ref="sale.view_sales_order_filter"/>
   <field name="arch" type="xml">
       <xpath expr="//search/group/filter[@name='customer']"
              position="after">
           <separator/>
           <filter name="tag_ids" string="Tags" domain="[]"
                   context="{'group_by': 'product_tags'}"/>
           <separator/>
       </xpath>
   </field>
</record>
<record id="sale_view_form_custom" model="ir.ui.view">
   <field name="name">ale.order.view.form.inherit.module.name</field>
   <field name="model">sale.order</field>
   <field name="inherit_id" ref="sale.view_order_form"/>
   <field name="arch" type="xml">
       <xpath expr="//field[@name='payment_term_id']" position="after">
           <field name="product_tags"/>
       </xpath>
   </field>
</record>

这里我们添加了一个 Char 字段 product_tags。它是一个计算字段,将标签名称连接到该字段。 

您可以看到我们在 XML 文件中提供了一个名为标签的分组过滤器。当我们尝试按这些销售订单分组时,它将显示在下面。

同样,我们可以为 many2many 字段添加 groupby。

接下来,让我们检查如何为 many2many 字段添加过滤器。

您可以创建一个替代 Many2Many 字段来计算来自 many2many 字段的值。我将提供一个例子来演示这一点。该字段必须指定 store=True。

.py

newfield_id = fields.Many2one('example_ids', compute=_compute_newfield_id, store=True) 
@api.depends('example_ids')
def _compute_newfield_id(self):
   for record in self:     
record.newfield_id = record.example_ids and record.example_ids[0] or False

 .xml

<field name="newfield_id" string="Example" filter_domain="[(newfield_id,'ilike', self)]"/>

您可以根据需要提供域名,因为可以在已保存的字段中简单搜索。如果您愿意,可以包含位置的 xpath。

要了解有关在 Odoo 16 中的客户门户表单中创建多对多字段的更多信息

相关推荐

  1. 如何 Odoo 16 设置和使用系统参数

    2024-07-11 21:06:04       21 阅读
  2. manim

    2024-07-11 21:06:04       31 阅读
  3. ~MAY~

    2024-07-11 21:06:04       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 21:06:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 21:06:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 21:06:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 21:06:04       69 阅读

热门阅读

  1. 【C#】遍历文件夹及其子文件夹指定后缀文件

    2024-07-11 21:06:04       19 阅读
  2. C语言从头学33——内存管理(一)

    2024-07-11 21:06:04       22 阅读
  3. Qt 的Q_PROPERTY关键字

    2024-07-11 21:06:04       20 阅读
  4. C++ 入门08:运算符重载

    2024-07-11 21:06:04       24 阅读
  5. [AI 大模型] 百度 文心一言

    2024-07-11 21:06:04       20 阅读
  6. 架构面试-场景题-单点登录(SSO)怎么实现的

    2024-07-11 21:06:04       23 阅读
  7. 深入理解Spring Boot中的事件驱动架构

    2024-07-11 21:06:04       20 阅读
  8. DDD架构面试问题

    2024-07-11 21:06:04       20 阅读
  9. 解析 pdfminer pdfparser.py

    2024-07-11 21:06:04       23 阅读
  10. 解决vue3子组件onMounted中获取不到props的值

    2024-07-11 21:06:04       17 阅读
  11. 关系代数中的八种基本运算

    2024-07-11 21:06:04       22 阅读