From dc9bcf479de49ece90bb4df97045c877e5a0e437 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 6 Aug 2014 14:59:57 +0200 Subject: [PATCH] [FIX] Allow search on `_inherits` fields. As `_inherits` fields are now handled via `related` fields (not stored, obviously), a new descriptor `searchable` has been added to `fields_get()` result to indicated if the field is searchable or not. --- addons/web/static/src/js/search.js | 2 +- openerp/fields.py | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 566179c2a38..b686a486155 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -2037,7 +2037,7 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @ this._super(parent); this.fields = _(fields).chain() .map(function(val, key) { return _.extend({}, val, {'name': key}); }) - .filter(function (field) { return !field.deprecated && (field.store === void 0 || field.store || field.fnct_search); }) + .filter(function (field) { return !field.deprecated && field.searchable; }) .sortBy(function(field) {return field.string;}) .value(); this.attrs = {_: _, fields: this.fields, selected: null}; diff --git a/openerp/fields.py b/openerp/fields.py index e9fd90805f2..bf6e29826b5 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -408,7 +408,8 @@ class Field(object): self.depends = ('.'.join(self.related),) self.compute = self._compute_related self.inverse = self._inverse_related - self.search = self._search_related + if field._description_searchable(env): + self.search = self._search_related # copy attributes from field to self (string, help, etc.) for attr, prop in self.related_attrs: @@ -524,23 +525,27 @@ class Field(object): def get_description(self, env): """ Return a dictionary that describes the field `self`. """ desc = {'type': self.type} - # determine 'store' - if self.store: - # if the corresponding column is a function field, check the column - column = env[self.model_name]._columns.get(self.name) - desc['store'] = bool(getattr(column, 'store', True)) - else: - desc['store'] = False - # determine other attributes for attr, prop in self.description_attrs: value = getattr(self, prop) if callable(value): value = value(env) - if value: + if value is not None: desc[attr] = value + return desc # properties used by get_description() + + def _description_store(self, env): + if self.store: + # if the corresponding column is a function field, check the column + column = env[self.model_name]._columns.get(self.name) + return bool(getattr(column, 'store', True)) + return False + + def _description_searchable(self, env): + return self._description_store(env) or bool(self.search) + _description_depends = property(attrgetter('depends')) _description_related = property(attrgetter('related')) _description_company_dependent = property(attrgetter('company_dependent'))