From e0139910f19e356cc826dc6c4fc870ec18fb647d Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sun, 26 Jun 2011 16:52:31 +0000 Subject: [PATCH] Fixed #15669 -- Included app label in admin validation messages. Thanks, lamby and Jure Cuhalev. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16462 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/validation.py | 14 +++++++------- .../regressiontests/admin_validation/tests.py | 14 +++++++++++++- tests/regressiontests/modeladmin/tests.py | 18 +++++++++--------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/django/contrib/admin/validation.py b/django/contrib/admin/validation.py index 58a84904dc3..9a0c9481200 100644 --- a/django/contrib/admin/validation.py +++ b/django/contrib/admin/validation.py @@ -104,8 +104,8 @@ def validate(cls, model): field = opts.get_field_by_name(field_name)[0] except models.FieldDoesNotExist: raise ImproperlyConfigured("'%s.list_editable[%d]' refers to a " - "field, '%s', not defined on %s." - % (cls.__name__, idx, field_name, model.__name__)) + "field, '%s', not defined on %s.%s." + % (cls.__name__, idx, field_name, model._meta.app_label, model.__name__)) if field_name not in cls.list_display: raise ImproperlyConfigured("'%s.list_editable[%d]' refers to " "'%s' which is not defined in 'list_display'." @@ -215,7 +215,7 @@ def validate_inline(cls, parent, parent_model): if fk and fk.name in cls.exclude: raise ImproperlyConfigured("%s cannot exclude the field " "'%s' - this is the foreign key to the parent model " - "%s." % (cls.__name__, fk.name, parent_model.__name__)) + "%s.%s." % (cls.__name__, fk.name, parent_model._meta.app_label, parent_model.__name__)) if hasattr(cls, "readonly_fields"): check_readonly_fields(cls, cls.model, cls.model._meta) @@ -372,8 +372,8 @@ def get_field(cls, model, opts, label, field): try: return opts.get_field(field) except models.FieldDoesNotExist: - raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s'." - % (cls.__name__, label, field, model.__name__)) + raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s.%s'." + % (cls.__name__, label, field, model._meta.app_label, model.__name__)) def check_formfield(cls, model, opts, label, field): if getattr(cls.form, 'base_fields', None): @@ -398,8 +398,8 @@ def fetch_attr(cls, model, opts, label, field): try: return getattr(model, field) except AttributeError: - raise ImproperlyConfigured("'%s.%s' refers to '%s' that is neither a field, method or property of model '%s'." - % (cls.__name__, label, field, model.__name__)) + raise ImproperlyConfigured("'%s.%s' refers to '%s' that is neither a field, method or property of model '%s.%s'." + % (cls.__name__, label, field, model._meta.app_label, model.__name__)) def check_readonly_fields(cls, model, opts): check_isseq(cls, "readonly_fields", cls.readonly_fields) diff --git a/tests/regressiontests/admin_validation/tests.py b/tests/regressiontests/admin_validation/tests.py index 2cf3c60062a..9e50a8b1123 100644 --- a/tests/regressiontests/admin_validation/tests.py +++ b/tests/regressiontests/admin_validation/tests.py @@ -92,10 +92,22 @@ class ValidationTestCase(TestCase): inlines = [SongInline] self.assertRaisesMessage(ImproperlyConfigured, - "SongInline cannot exclude the field 'album' - this is the foreign key to the parent model Album.", + "SongInline cannot exclude the field 'album' - this is the foreign key to the parent model admin_validation.Album.", validate, AlbumAdmin, Album) + def test_app_label_in_admin_validation(self): + """ + Regression test for #15669 - Include app label in admin validation messages + """ + class RawIdNonexistingAdmin(admin.ModelAdmin): + raw_id_fields = ('nonexisting',) + + self.assertRaisesMessage(ImproperlyConfigured, + "'RawIdNonexistingAdmin.raw_id_fields' refers to field 'nonexisting' that is missing from model 'admin_validation.Album'.", + validate, + RawIdNonexistingAdmin, Album) + def test_fk_exclusion(self): """ Regression test for #11709 - when testing for fk excluding (when exclude is diff --git a/tests/regressiontests/modeladmin/tests.py b/tests/regressiontests/modeladmin/tests.py index e83dc39bacc..27f9f2cb45e 100644 --- a/tests/regressiontests/modeladmin/tests.py +++ b/tests/regressiontests/modeladmin/tests.py @@ -403,7 +403,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.raw_id_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.raw_id_fields' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -631,7 +631,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.filter_vertical' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.filter_vertical' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -671,7 +671,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.filter_horizontal' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.filter_horizontal' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -711,7 +711,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.radio_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.radio_fields' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -762,7 +762,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.prepopulated_fields' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.prepopulated_fields' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -773,7 +773,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.prepopulated_fields\['slug'\]\[0\]' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.prepopulated_fields\['slug'\]\[0\]' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -1010,7 +1010,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.date_hierarchy' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.date_hierarchy' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -1050,7 +1050,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestModelAdmin.ordering\[0\]' refers to field 'non_existent_field' that is missing from model 'ValidationTestModel'.", + "'ValidationTestModelAdmin.ordering\[0\]' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestModel'.", validate, ValidationTestModelAdmin, ValidationTestModel, @@ -1245,7 +1245,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "'ValidationTestInline.fk_name' refers to field 'non_existent_field' that is missing from model 'ValidationTestInlineModel'.", + "'ValidationTestInline.fk_name' refers to field 'non_existent_field' that is missing from model 'modeladmin.ValidationTestInlineModel'.", validate, ValidationTestModelAdmin, ValidationTestModel,