Add better error message for DatabaseIntegrityError for missing foreign key
This commit is contained in:
@@ -166,6 +166,15 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="module">ir</field>
|
||||
<field name="fuzzy" eval="False"/>
|
||||
</record>
|
||||
<record model="ir.translation" id="translation_foreign_model_missing">
|
||||
<field name="name">foreign_model_missing</field>
|
||||
<field name="lang">en_US</field>
|
||||
<field name="type">error</field>
|
||||
<field name="src">The value of field "%s" on "%s" doesn't exist.</field>
|
||||
<field name="value">The value of field "%s" on "%s" doesn't exist.</field>
|
||||
<field name="module">ir</field>
|
||||
<field name="fuzzy" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="act_translation_set_report_init_view_form">
|
||||
<field name="model">ir.translation.set_report.init</field>
|
||||
|
||||
+36
-13
@@ -330,6 +330,17 @@ class ModelSQL(ModelStorage):
|
||||
error_args=self._get_error_args(
|
||||
cursor2, user, field_name,
|
||||
context=context), context=context)
|
||||
if isinstance(field, fields.Many2One) \
|
||||
and values.get(field_name):
|
||||
model_obj = self.pool.get(field.model_name)
|
||||
if not model_obj.search(cursor2, 0, [
|
||||
('id', '=', values[field_name]),
|
||||
], context=context):
|
||||
self.raise_user_error(cursor2,
|
||||
'foreign_model_missing',
|
||||
error_args=self._get_error_args(
|
||||
cursor2, user, field_name,
|
||||
context=context), context=context)
|
||||
finally:
|
||||
cursor2.close()
|
||||
raise
|
||||
@@ -768,19 +779,31 @@ class ModelSQL(ModelStorage):
|
||||
cursor2 = database.cursor()
|
||||
try:
|
||||
for field_name in values:
|
||||
if field_name in self._columns:
|
||||
field = self._columns[field_name]
|
||||
# Check required fields
|
||||
if field.required \
|
||||
and field_name not in \
|
||||
('create_uid', 'create_date'):
|
||||
if not values[field_name]:
|
||||
self.raise_user_error(cursor2,
|
||||
'required_field',
|
||||
error_args=self._get_error_args(
|
||||
cursor2, user, field_name,
|
||||
context=context),
|
||||
context=context)
|
||||
if field_name not in self._columns:
|
||||
continue
|
||||
field = self._columns[field_name]
|
||||
# Check required fields
|
||||
if field.required \
|
||||
and field_name not in \
|
||||
('create_uid', 'create_date'):
|
||||
if not values[field_name]:
|
||||
self.raise_user_error(cursor2,
|
||||
'required_field',
|
||||
error_args=self._get_error_args(
|
||||
cursor2, user, field_name,
|
||||
context=context),
|
||||
context=context)
|
||||
if isinstance(field, fields.Many2One) \
|
||||
and values[field_name]:
|
||||
model_obj = self.pool.get(field.model_name)
|
||||
if not model_obj.search(cursor2, 0, [
|
||||
('id', '=', values[field_name]),
|
||||
], context=context):
|
||||
self.raise_user_error(cursor2,
|
||||
'foreign_model_missing',
|
||||
error_args=self._get_error_args(
|
||||
cursor2, user, field_name,
|
||||
context=context), context=context)
|
||||
finally:
|
||||
cursor2.close()
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user