diff --git a/addons/web/static/src/js/views/search_panel.js b/addons/web/static/src/js/views/search_panel.js
index 55d2f23c0fa..38872e8d381 100644
--- a/addons/web/static/src/js/views/search_panel.js
+++ b/addons/web/static/src/js/views/search_panel.js
@@ -442,7 +442,7 @@ var SearchPanel = Widget.extend({
var category = self.categories[categoryId];
if (category.activeValueId) {
var field = self.fields[category.fieldName];
- var op = field.type === 'many2one' ? 'child_of' : '=';
+ var op = (field.type === 'many2one' && category.parentField) ? 'child_of' : '=';
domain.push([category.fieldName, op, category.activeValueId]);
}
return domain;
diff --git a/addons/web/static/tests/views/search_panel_tests.js b/addons/web/static/tests/views/search_panel_tests.js
index b51ba9c3b3a..a285c1df81b 100644
--- a/addons/web/static/tests/views/search_panel_tests.js
+++ b/addons/web/static/tests/views/search_panel_tests.js
@@ -698,6 +698,57 @@ QUnit.module('Views', {
kanban.destroy();
});
+ QUnit.test('category with no parent_field', async function (assert) {
+ assert.expect(10);
+
+ var kanban = await createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ mockRPC: function (route, args) {
+ if (route === '/web/dataset/search_read') {
+ assert.step(JSON.stringify(args.domain));
+ }
+ return this._super.apply(this, arguments);
+ },
+ services: this.services,
+ arch: '' +
+ '' +
+ '' +
+ '' +
+ '
' +
+ '' +
+ '',
+ archs: {
+ 'partner,false,search': '' +
+ '' +
+ '' +
+ '' +
+ '',
+ },
+ });
+
+ // 'All' is selected by default
+ assert.containsOnce(kanban, '.o_search_panel_category_value .active');
+ assert.containsOnce(kanban, '.o_search_panel_category_value:first .active');
+ assert.containsN(kanban, '.o_kanban_record:not(.o_kanban_ghost)', 4);
+ assert.containsN(kanban, '.o_search_panel_category_value', 3);
+
+ // click on 'gold' category
+ await testUtils.dom.click(kanban.$('.o_search_panel_category_value:nth(1) header'));
+
+ assert.containsOnce(kanban, '.o_search_panel_category_value .active');
+ assert.containsOnce(kanban, '.o_search_panel_category_value:nth(1) .active');
+ assert.containsOnce(kanban, '.o_kanban_record:not(.o_kanban_ghost)');
+
+ assert.verifySteps([
+ '[]',
+ '[["category_id","=",6]]', // must use '=' operator (instead of 'child_of')
+ ]);
+
+ kanban.destroy();
+ });
+
QUnit.test('can (un)fold parent category values', async function (assert) {
assert.expect(7);
@@ -1567,9 +1618,9 @@ QUnit.module('Views', {
assert.verifySteps([
'[]', // category_domain (All)
'[["category_id","=",false]]', // comodel_domain (All)
- '[["category_id","child_of",6]]', // category_domain ('gold')
+ '[["category_id","=",6]]', // category_domain ('gold')
'[["category_id","=",6]]', // comodel_domain ('gold')
- '[["category_id","child_of",7]]', // category_domain ('silver')
+ '[["category_id","=",7]]', // category_domain ('silver')
'[["category_id","=",7]]', // comodel_domain ('silver')
'[]', // category_domain (All)
'[["category_id","=",false]]', // comodel_domain (All)