Commit d8fdee7d authored by Claude Paroz's avatar Claude Paroz
Browse files

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

Thanks agale031176@gmail.com for the report.
Backport of fafb6cf0 from master.
parent 6f48ae0b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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()
+2 −0
Original line number Diff line number Diff line
@@ -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).
+10 −1
Original line number Diff line number Diff line
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)