diff --git a/odoo/addons/base/models/ir_filters.py b/odoo/addons/base/models/ir_filters.py index 4fa5d66b01d..3a3938b3caa 100644 --- a/odoo/addons/base/models/ir_filters.py +++ b/odoo/addons/base/models/ir_filters.py @@ -144,12 +144,12 @@ class IrFilters(models.Model): # Partial constraint, complemented by unique index (see below). Still # useful to keep because it provides a proper error message when a # violation occurs, as it shares the same prefix as the unique index. - ('name_model_uid_unique', 'unique (name, model_id, user_id, action_id)', 'Filter names must be unique'), + ('name_model_uid_unique', 'unique (model_id, user_id, action_id, name)', 'Filter names must be unique'), ] def _auto_init(self): result = super(IrFilters, self)._auto_init() # Use unique index to implement unique constraint on the lowercase name (not possible using a constraint) tools.create_unique_index(self._cr, 'ir_filters_name_model_uid_unique_action_index', - self._table, ['lower(name)', 'model_id', 'COALESCE(user_id,-1)', 'COALESCE(action_id,-1)']) + self._table, ['model_id', 'COALESCE(user_id,-1)', 'COALESCE(action_id,-1)', 'lower(name)']) return result diff --git a/odoo/addons/base/populate/__init__.py b/odoo/addons/base/populate/__init__.py index abcf946fd4f..3a0d4a4430b 100644 --- a/odoo/addons/base/populate/__init__.py +++ b/odoo/addons/base/populate/__init__.py @@ -1,3 +1,4 @@ +from . import ir_filters from . import res_partner from . import res_company from . import res_currency diff --git a/odoo/addons/base/populate/ir_filters.py b/odoo/addons/base/populate/ir_filters.py new file mode 100644 index 00000000000..e714b29528e --- /dev/null +++ b/odoo/addons/base/populate/ir_filters.py @@ -0,0 +1,28 @@ +from odoo import models +from odoo.tools import populate + + +class Filter(models.Model): + _inherit = "ir.filters" + + # Based on the sizes of res.users, 10 filters per user. + _populate_sizes = { + 'small': 100, + 'medium': 10000, + 'large': 100000, + } + _populate_dependencies = ['res.users'] + + def _populate_factories(self): + return [ + ('name', populate.constant('filter_{counter}')), + ('user_id', populate.randomize(self.env.registry.populated_models['res.users'])), + ('domain', populate.iterate(["[('id', '=', 1)]", "[('id', '=', 2)]", "[('id', '=', 3)]"])), + ('context', populate.iterate(["{{}}", "{{'group_by': ['create_date:month']}}"])), + ('sort', populate.iterate(["[]"])), + ('model_id', populate.randomize( + list(dict(self._fields['model_id'].get_description(self.env, ['selection'])['selection']).keys()) + )), + ('is_default', populate.cartesian([True, False], [0.1, 0.9])), + ('action_id', populate.randomize(self.env['ir.actions.actions'].search([]).ids)), + ]