Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Changed r10668 to not falsely error out when using generic inlines.

The bug was picked up by the tests already, but only if run against a
backend that supports referential integrity.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10732 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit fe971ec66f5d42945b2583037303be31f53ea524 1 parent 8c2db4a
@malcolmt malcolmt authored
Showing with 11 additions and 6 deletions.
  1. +3 −3 django/contrib/admin/validation.py
  2. +8 −3 django/forms/models.py
View
6 django/contrib/admin/validation.py
@@ -169,11 +169,11 @@ def validate_inline(cls, parent, parent_model):
# exclude
if hasattr(cls, 'exclude') and cls.exclude:
- fk_name = _get_foreign_key(parent_model, cls.model).name
- if fk_name in cls.exclude:
+ fk = _get_foreign_key(parent_model, cls.model, can_fail=True)
+ 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." % (cls.__name__, fk.name, parent_model.__name__))
def validate_base(cls, model):
opts = model._meta
View
11 django/forms/models.py
@@ -756,10 +756,13 @@ def get_unique_error_message(self, unique_check):
unique_check = [field for field in unique_check if field != self.fk.name]
return super(BaseInlineFormSet, self).get_unique_error_message(unique_check)
-def _get_foreign_key(parent_model, model, fk_name=None):
+def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False):
"""
- Finds and returns the ForeignKey from model to parent if there is one.
- If fk_name is provided, assume it is the name of the ForeignKey field.
+ Finds and returns the ForeignKey from model to parent if there is one
+ (returns None if can_fail is True and no such field exists). If fk_name is
+ provided, assume it is the name of the ForeignKey field. Unles can_fail is
+ True, an exception is raised if there is no ForeignKey from model to
+ parent_model.
"""
# avoid circular import
from django.db.models import ForeignKey
@@ -785,6 +788,8 @@ def _get_foreign_key(parent_model, model, fk_name=None):
if len(fks_to_parent) == 1:
fk = fks_to_parent[0]
elif len(fks_to_parent) == 0:
+ if can_fail:
+ return
raise Exception("%s has no ForeignKey to %s" % (model, parent_model))
else:
raise Exception("%s has more than 1 ForeignKey to %s" % (model, parent_model))
Please sign in to comment.
Something went wrong with that request. Please try again.