Add better error message for DatabaseIntegrityError for missing foreign key

This commit is contained in:
Cédric Krier
2009-04-06 12:33:02 +02:00
parent 8e74f944c8
commit 29ac6aceaf
2 changed files with 45 additions and 13 deletions
+9
View File
@@ -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
View File
@@ -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