首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在one2many字段上分组- Odoo 8

在Odoo 8中,可以使用@api.depends装饰器和@api.multi装饰器来实现在one2many字段上进行分组。

首先,需要在one2many字段所在的模型中定义一个计算字段,该计算字段将用于存储分组后的结果。在计算字段的计算方法中,使用@api.depends装饰器来指定依赖关系,确保在相关字段发生变化时,计算字段会被重新计算。

接下来,在计算字段的计算方法中,使用@api.multi装饰器来确保可以处理多个记录。在方法中,可以使用groupby函数来对one2many字段进行分组。groupby函数接受一个字段名作为参数,并返回一个字典,其中键是字段值,值是具有相同字段值的记录集合。

下面是一个示例代码:

代码语言:python
代码运行次数:0
复制
from odoo import models, fields, api

class MyModel(models.Model):
    _name = 'my.model'

    name = fields.Char(string='Name')
    lines = fields.One2many('my.model.line', 'model_id', string='Lines')
    grouped_lines = fields.One2many('my.model.grouped.line', 'model_id', string='Grouped Lines', compute='_compute_grouped_lines')

    @api.depends('lines')
    @api.multi
    def _compute_grouped_lines(self):
        for record in self:
            grouped_lines = []
            lines_grouped = record.lines.sorted('field_to_group_by').groupby('field_to_group_by')
            for key, values in lines_grouped.items():
                grouped_lines.append((0, 0, {
                    'field_to_group_by': key,
                    'lines': [(6, 0, values.ids)]
                }))
            record.grouped_lines = grouped_lines

class MyModelLine(models.Model):
    _name = 'my.model.line'

    model_id = fields.Many2one('my.model', string='Model')
    field_to_group_by = fields.Char(string='Field to Group By')
    # Other fields...

class MyModelGroupedLine(models.Model):
    _name = 'my.model.grouped.line'

    model_id = fields.Many2one('my.model', string='Model')
    field_to_group_by = fields.Char(string='Field to Group By')
    lines = fields.Many2many('my.model.line', string='Lines')
    # Other fields...

在上述示例代码中,MyModel模型中的grouped_lines字段是一个one2many字段,用于存储分组后的结果。MyModelLine模型是MyModel模型中lines字段的子模型,用于存储one2many字段的每一行数据。MyModelGroupedLine模型是MyModel模型中grouped_lines字段的子模型,用于存储分组后的结果。

_compute_grouped_lines方法中,首先对lines字段进行排序,然后使用groupby函数对field_to_group_by字段进行分组。接着,遍历分组后的结果,将每个分组的记录添加到grouped_lines列表中。最后,将grouped_lines赋值给grouped_lines字段,完成分组操作。

请注意,上述示例代码中的field_to_group_by字段是一个示例字段,您需要根据实际情况替换为您要分组的字段。

关于Odoo 8的更多信息和文档,请参考腾讯云的Odoo 8产品介绍链接地址:Odoo 8产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ODOO配置文件/etc/odoo.conf配置详解

    Odoo是一个多租户系统:一个Odoo系统可以运行并服务于多个数据库实例。它也是高度可定制的,定制(从加载的模块开始)取决于“当前数据库”。 作为登录公司用户使用后端(web客户端)时,这不是问题:登录时可以选择数据库,然后加载自定义设置。 但是,对于没有绑定到数据库的未登录用户(门户、网站)来说,这是一个问题:Odoo需要知道应该使用哪个数据库来加载网站页面或执行操作。如果没有使用多租户,这不是问题,只有一个数据库可以使用,但是如果有多个数据库可以访问,Odoo需要一个规则来知道它应该使用哪一个。 这是--db filter的目的之一:它指定如何根据所请求的主机名(域)选择数据库。该值是一个正则表达式,可能包括动态注入的主机名(%h)或访问系统所通过的第一个子域(%d)。 对于生产中托管多个数据库的服务器,特别是在使用网站时,必须设置dbfilter,否则许多功能将无法正常工作。

    03
    领券