Fixed #11709 — Pass inline fk_name attribute when grabbing foreign key to test for exclusion. Thanks yishaibeeri for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11630 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
69535b7b13
commit
5fc35c9caf
|
@ -169,7 +169,7 @@ def validate_inline(cls, parent, parent_model):
|
||||||
|
|
||||||
# exclude
|
# exclude
|
||||||
if hasattr(cls, 'exclude') and cls.exclude:
|
if hasattr(cls, 'exclude') and cls.exclude:
|
||||||
fk = _get_foreign_key(parent_model, cls.model, can_fail=True)
|
fk = _get_foreign_key(parent_model, cls.model, fk_name=cls.fk_name, can_fail=True)
|
||||||
if fk and fk.name in cls.exclude:
|
if fk and fk.name in cls.exclude:
|
||||||
raise ImproperlyConfigured("%s cannot exclude the field "
|
raise ImproperlyConfigured("%s cannot exclude the field "
|
||||||
"'%s' - this is the foreign key to the parent model "
|
"'%s' - this is the foreign key to the parent model "
|
||||||
|
|
|
@ -4,9 +4,11 @@ Tests of ModelAdmin validation logic.
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
class Album(models.Model):
|
class Album(models.Model):
|
||||||
title = models.CharField(max_length=150)
|
title = models.CharField(max_length=150)
|
||||||
|
|
||||||
|
|
||||||
class Song(models.Model):
|
class Song(models.Model):
|
||||||
title = models.CharField(max_length=150)
|
title = models.CharField(max_length=150)
|
||||||
album = models.ForeignKey(Album)
|
album = models.ForeignKey(Album)
|
||||||
|
@ -17,11 +19,19 @@ class Song(models.Model):
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
|
||||||
|
class Model11709(models.Model):
|
||||||
|
album1 = models.ForeignKey(Album, related_name="album1_set")
|
||||||
|
album2 = models.ForeignKey(Album, related_name="album2_set")
|
||||||
|
e = models.CharField(max_length=1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
__test__ = {'API_TESTS':"""
|
__test__ = {'API_TESTS':"""
|
||||||
|
|
||||||
>>> from django import forms
|
>>> from django import forms
|
||||||
>>> from django.contrib import admin
|
>>> from django.contrib import admin
|
||||||
>>> from django.contrib.admin.validation import validate
|
>>> from django.contrib.admin.validation import validate, validate_inline
|
||||||
|
|
||||||
# Regression test for #8027: custom ModelForms with fields/fieldsets
|
# Regression test for #8027: custom ModelForms with fields/fieldsets
|
||||||
|
|
||||||
|
@ -58,4 +68,15 @@ Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
ImproperlyConfigured: SongInline cannot exclude the field 'album' - this is the foreign key to the parent model Album.
|
ImproperlyConfigured: SongInline cannot exclude the field 'album' - this is the foreign key to the parent model Album.
|
||||||
|
|
||||||
|
# Regression test for #11709 - when testing for fk excluding (when exclude is
|
||||||
|
# given) make sure fk_name is honored or things blow up when there is more
|
||||||
|
# than one fk to the parent model.
|
||||||
|
|
||||||
|
>>> class Model11709Inline(admin.TabularInline):
|
||||||
|
... model = Model11709
|
||||||
|
... exclude = ("e",)
|
||||||
|
... fk_name = "album1"
|
||||||
|
|
||||||
|
>>> validate_inline(Model11709Inline, None, Album)
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue