Hi all,
I've introduced an _sql_constraints with a custom module.
I've created a custom model inheriting the res.partner model, this is the script in the model.py file:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
# class custom_accounting_mgmt(models.Model):
# _name = 'custom_accounting_mgmt.custom_accounting_mgmt'
# name = fields.Char()
# value = fields.Integer()
# value2 = fields.Float(compute="_value_pc", store=True)
# description = fields.Text()
#
# @api.depends('value')
# def _value_pc(self):
# self.value2 = float(self.value) / 100
class Partner(models.Model):
_inherit = 'res.partner'
_sql_constraints = [
('vat_unique',
'UNIQUE(name, vat)',
"Attenzione!!! la Partita deve essere univoca, esiste già un altro cliente con lo stesso nome e la stessa partita iva."),
('x_fiscal_code_unique',
'UNIQUE(x_fiscal_code)',
"Attenzione!!! Esiste già un altro cliente con lo stesso Codice Fiscale."),
]
now the issue is from gui, if I try to violate the _sql_constraints the application si showing the following exception:
Traceback (most recent call last): File "C:\Program Files (x86)\Odoo 11.0\server\odoo\service\model.py", line 97, in wrapper return f(dbname, *args, **kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 332, in checked_call result = self.endpoint(*a, **kw) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 933, in __call__ return self.method(*args, **kw) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 512, in response_wrap response = f(*args, **kw) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\web\controllers\main.py", line 930, in call_kw return self._call_kw(model, method, args, kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\web\controllers\main.py", line 922, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\base\res\res_partner.py", line 514, in write result = result and super(Partner, self).write(vals) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\mail\models\mail_thread.py", line 277, in write result = super(MailThread, self).write(values) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\addons\mail\models\mail_activity.py", line 327, in write return super(MailActivityMixin, self).write(vals) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\models.py", line 3024, in write self._write(old_vals) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\models.py", line 3125, in _write cr.execute(query, params + (sub_ids,)) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\sql_db.py", line 155, in wrapper return f(self, *args, **kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\sql_db.py", line 232, in execute res = self._obj.execute(query, params) psycopg2.IntegrityError: ERRORE: un valore chiave duplicato viola il vincolo univoco "res_partner_x_fiscal_code_unique" DETAIL: La chiave (x_fiscal_code)=(SCFFPP85B13G273D) esiste già. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 647, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 307, in _handle_exception raise pycompat.reraise(type(exception), exception, sys.exc_info()[2]) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\tools\pycompat.py", line 87, in reraise raise value File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 689, in dispatch result = self._call_function(**self.params) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\http.py", line 339, in _call_function return checked_call(self.db, *args, **kwargs) File "C:\Program Files (x86)\Odoo 11.0\server\odoo\service\model.py", line 141, in wrapper raise ValidationError(inst[0]) TypeError: 'IntegrityError' object does not support indexing
check out the same and see whether it is working or not in a new db
Same issue here. I have 2 sql constraint on custom model, on raise a proper pop up error as expected, the other a full stacktrace as you
_sql_constraints = [
('company_role_uniq', 'unique(partner_id, company_id, role)', 'Company-Role must be unique for each contact!'),
('ref_uniq', 'unique(reference)', 'Reference already used! It must be unique'),
]