Skip to content

Commit

Permalink
Fixed #9863. A ForeignKey with editable=False to the parent in an inl…
Browse files Browse the repository at this point in the history
…ine no longer raises an exception. Thanks to keithb for the test case and Alex Gaynor for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10239 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jkocherhans committed Mar 31, 2009
1 parent 5c9d543 commit 62353e8
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
6 changes: 5 additions & 1 deletion django/forms/models.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -545,7 +545,11 @@ def add_fields(self, form, index):
if self._pk_field == self.fk: if self._pk_field == self.fk:
form.fields[self._pk_field.name] = InlineForeignKeyField(self.instance, pk_field=True) form.fields[self._pk_field.name] = InlineForeignKeyField(self.instance, pk_field=True)
else: else:
form.fields[self.fk.name] = InlineForeignKeyField(self.instance, label=form.fields[self.fk.name].label) # The foreign key field might not be on the form, so we poke at the
# Model field to get the label, since we need that for error messages.
form.fields[self.fk.name] = InlineForeignKeyField(self.instance,
label=getattr(form.fields.get(self.fk.name), 'label', capfirst(self.fk.verbose_name))
)


def _get_foreign_key(parent_model, model, fk_name=None): def _get_foreign_key(parent_model, model, fk_name=None):
""" """
Expand Down
15 changes: 15 additions & 0 deletions tests/regressiontests/admin_views/models.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -248,6 +248,20 @@ class PodcastAdmin(admin.ModelAdmin):


ordering = ('name',) ordering = ('name',)


class Parent(models.Model):
name = models.CharField(max_length=128)

class Child(models.Model):
parent = models.ForeignKey(Parent, editable=False)
name = models.CharField(max_length=30, blank=True)

class ChildInline(admin.StackedInline):
model = Child

class ParentAdmin(admin.ModelAdmin):
model = Parent
inlines = [ChildInline]

admin.site.register(Article, ArticleAdmin) admin.site.register(Article, ArticleAdmin)
admin.site.register(CustomArticle, CustomArticleAdmin) admin.site.register(CustomArticle, CustomArticleAdmin)
admin.site.register(Section, inlines=[ArticleInline]) admin.site.register(Section, inlines=[ArticleInline])
Expand All @@ -259,6 +273,7 @@ class PodcastAdmin(admin.ModelAdmin):
admin.site.register(Subscriber, SubscriberAdmin) admin.site.register(Subscriber, SubscriberAdmin)
admin.site.register(ExternalSubscriber, ExternalSubscriberAdmin) admin.site.register(ExternalSubscriber, ExternalSubscriberAdmin)
admin.site.register(Podcast, PodcastAdmin) admin.site.register(Podcast, PodcastAdmin)
admin.site.register(Parent, ParentAdmin)


# We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
# That way we cover all four cases: # That way we cover all four cases:
Expand Down
17 changes: 17 additions & 0 deletions tests/regressiontests/admin_views/tests.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -946,3 +946,20 @@ def test_custom_function_action_with_redirect(self):
} }
response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data) response = self.client.post('/test_admin/admin/admin_views/externalsubscriber/', action_data)
self.failUnlessEqual(response.status_code, 302) self.failUnlessEqual(response.status_code, 302)

class TestInlineNotEditable(TestCase):
fixtures = ['admin-views-users.xml']

def setUp(self):
result = self.client.login(username='super', password='secret')
self.failUnlessEqual(result, True)

def tearDown(self):
self.client.logout()

def test(self):
"""
InlineModelAdmin broken?
"""
response = self.client.get('/test_admin/admin/admin_views/parent/add/')
self.failUnlessEqual(response.status_code, 200)

0 comments on commit 62353e8

Please sign in to comment.