[1.6.x] Fixed #21472 -- Fixed inline formsets display when parent pk is 0

Thanks agale031176@gmail.com for the report.
Backport of fafb6cf049 from master.
This commit is contained in:
Claude Paroz 2013-11-20 21:34:29 +01:00
parent 6f48ae0b0f
commit d8fdee7db8
3 changed files with 13 additions and 2 deletions

View File

@ -831,7 +831,7 @@ class BaseInlineFormSet(BaseModelFormSet):
self.save_as_new = save_as_new
if queryset is None:
queryset = self.model._default_manager
if self.instance.pk:
if self.instance.pk is not None:
qs = queryset.filter(**{self.fk.name: self.instance})
else:
qs = queryset.none()

View File

@ -26,3 +26,5 @@ Bug fixes
for the non-breaking space was returned verbatim (#21415).
* Fixed :djadmin:`loaddata` error when fixture file name contained any dots
non related to file extensions (#21457).
* Fixed display of inline instances in formsets when parent has 0 for primary
key (#21472).

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import, unicode_literals
from django.forms.models import inlineformset_factory
from django.test import TestCase
from django.test import TestCase, skipUnlessDBFeature
from django.utils import six
from .models import Poet, Poem, School, Parent, Child
@ -157,3 +157,12 @@ class InlineFormsetFactoryTest(TestCase):
inlineformset_factory(
Parent, Child, exclude=('school',), fk_name='mother'
)
@skipUnlessDBFeature('allows_primary_key_0')
def test_zero_primary_key(self):
# Regression test for #21472
poet = Poet.objects.create(id=0, name='test')
poem = poet.poem_set.create(name='test poem')
PoemFormSet = inlineformset_factory(Poet, Poem, fields="__all__", extra=0)
formset = PoemFormSet(None, instance=poet)
self.assertEqual(len(formset.forms), 1)