The caller of `read_group` can now provide the aggregating function to use for
a given field:
# set aggregating operator for fields 'foo' and 'bar'
model.read_group(domain, ['foo:sum', 'bar:avg'], ...)
One can also aggregate the same field several times, by giving a specific
output name for each:
# aggregate 'foo' with both 'min' and 'max'
model.read_group(domain, ['foomin:min(foo)', 'foomax:max(foo)'], ...)
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import fields, models
|
|
|
|
|
|
class GroupOnDate(models.Model):
|
|
_name = 'test_read_group.on_date'
|
|
|
|
date = fields.Date("Date")
|
|
value = fields.Integer("Value")
|
|
|
|
|
|
class BooleanAggregate(models.Model):
|
|
_name = 'test_read_group.aggregate.boolean'
|
|
_order = 'key DESC'
|
|
|
|
key = fields.Integer()
|
|
bool_and = fields.Boolean(default=False, group_operator='bool_and')
|
|
bool_or = fields.Boolean(default=False, group_operator='bool_or')
|
|
bool_array = fields.Boolean(default=False, group_operator='array_agg')
|
|
|
|
|
|
class Aggregate(models.Model):
|
|
_name = 'test_read_group.aggregate'
|
|
_order = 'id'
|
|
|
|
key = fields.Integer()
|
|
value = fields.Integer("Value")
|
|
partner_id = fields.Many2one('res.partner')
|
|
|
|
|
|
class GroupOnSelection(models.Model):
|
|
_name = 'test_read_group.on_selection'
|
|
|
|
state = fields.Selection([('a', "A"), ('b', "B")], group_expand='_expand_states')
|
|
value = fields.Integer()
|
|
|
|
def _expand_states(self, states, domain, order):
|
|
# return all possible states, in order
|
|
return [key for key, val in type(self).state.selection]
|