In my odoo app i have an Area model and a Department model. Every area has a department (Many2One relation). Every department has a code and name. I wanted to overwrite the "_name_search" function in department so it can me searched using both code and name. But when I am on the Area form view and I start typing in the department_id field for selecting a department on that area, Odoo shows an error
psycopg2.ProgrammingError: operator does not exist: integer = record LINE 1: ...OM "cusaf_department" WHERE "cusaf_department".id IN ((1, 'A... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
I am working with Odoo14. Here is my code:
class Department(models.Model): _name = 'cusaf.department' _description = 'Departamento' name = fields.Char(string='Departamento', required=True) department_code = fields.Char(string='Código departamento') _sql_constraints = [ ('name_uniq', 'unique (name)', "Error: Ya existe un departamento con el mismo nombre"), ('name_uniq', 'unique (department_code)', "Error: Ya existe un departamento con el mismo código") ] @api.model def _name_search(self, name='', args=None, operator='ilike', limit=100): if args is None: args = [] domain = args + ['|', ('department_code', operator, name), ('name', operator, name)] return super(Department, self).search(domain, limit=limit).name_get() class Area(models.Model): _name = 'cusaf.area' _description = 'Area' _inherit = ['mail.thread', 'mail.activity.mixin'] active = fields.Boolean(default=True) name = fields.Char(string='Identificador externo', required=True) department_id = fields.Many2one('cusaf.department', string='Departamento')
And here is the full error code:
Odoo Server Error Traceback (most recent call last): File "/home/ernesto/Programming/odoo/odoo14/odoo/addons/base/models/ir_http.py", line 237, in _dispatch result = request.dispatch() File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 683, in dispatch result = self._call_function(**self.params) File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 359, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 347, in checked_call result = self.endpoint(*a, **kw) File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 912, in __call__ return self.method(*args, **kw) File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 531, in response_wrap response = f(*args, **kw) File "/home/ernesto/Programming/odoo/odoo14/addons/web/controllers/main.py", line 1377, in call_kw return self._call_kw(model, method, args, kwargs) File "/home/ernesto/Programming/odoo/odoo14/addons/web/controllers/main.py", line 1369, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/api.py", line 392, in call_kw result = _call_kw_model(method, model, args, kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/api.py", line 365, in _call_kw_model result = method(recs, *args, **kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/models.py", line 1792, in name_search return self.browse(ids).sudo().name_get() File "/home/ernesto/Programming/odoo/odoo14/odoo/models.py", line 1737, in name_get result.append((record.id, convert(record[name], record))) File "/home/ernesto/Programming/odoo/odoo14/odoo/models.py", line 5659, in __getitem__ return self._fields[key].__get__(self, type(self)) File "/home/ernesto/Programming/odoo/odoo14/odoo/fields.py", line 976, in __get__ recs._fetch_field(self) File "/home/ernesto/Programming/odoo/odoo14/odoo/models.py", line 3067, in _fetch_field self._read(fnames) File "/home/ernesto/Programming/odoo/odoo14/odoo/models.py", line 3134, in _read cr.execute(query_str, params + [sub_ids]) File "", line 2, in execute File "/home/ernesto/Programming/odoo/odoo14/odoo/sql_db.py", line 101, in check return f(self, *args, **kwargs) File "/home/ernesto/Programming/odoo/odoo14/odoo/sql_db.py", line 298, in execute res = self._obj.execute(query, params) Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 639, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/ernesto/Programming/odoo/odoo14/odoo/http.py", line 315, in _handle_exception raise exception.with_traceback(None) from new_cause psycopg2.ProgrammingError: operator does not exist: integer = record LINE 1: ...OM "cusaf_department" WHERE "cusaf_department".id IN ((1, 'A... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.