Fixed #21472 -- Fixed inline formsets display when parent pk is 0

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

View File

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

View File

@ -26,3 +26,5 @@ Bug fixes
for the non-breaking space was returned verbatim (#21415). for the non-breaking space was returned verbatim (#21415).
* Fixed :djadmin:`loaddata` error when fixture file name contained any dots * Fixed :djadmin:`loaddata` error when fixture file name contained any dots
non related to file extensions (#21457). 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 unicode_literals from __future__ import unicode_literals
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from django.test import TestCase from django.test import TestCase, skipUnlessDBFeature
from django.utils import six from django.utils import six
from .models import Poet, Poem, School, Parent, Child from .models import Poet, Poem, School, Parent, Child
@ -157,3 +157,12 @@ class InlineFormsetFactoryTest(TestCase):
inlineformset_factory( inlineformset_factory(
Parent, Child, exclude=('school',), fk_name='mother' 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)