在Odoo 8中,可以使用@api.depends
装饰器和@api.multi
装饰器来实现在one2many
字段上进行分组。
首先,需要在one2many
字段所在的模型中定义一个计算字段,该计算字段将用于存储分组后的结果。在计算字段的计算方法中,使用@api.depends
装饰器来指定依赖关系,确保在相关字段发生变化时,计算字段会被重新计算。
接下来,在计算字段的计算方法中,使用@api.multi
装饰器来确保可以处理多个记录。在方法中,可以使用groupby
函数来对one2many
字段进行分组。groupby
函数接受一个字段名作为参数,并返回一个字典,其中键是字段值,值是具有相同字段值的记录集合。
下面是一个示例代码:
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产品介绍
领取专属 10元无门槛券
手把手带您无忧上云