Commit 38d9b091 authored by Brian Rosner's avatar Brian Rosner
Browse files

[0.5.X] Fixed #9462 -- Set the instance in an inline formset correctly so that...

[0.5.X] Fixed #9462 -- Set the instance in an inline formset correctly so that None does not get passed through to the queryset. Thanks tobias and copelco for the ticket.

Backport of r9293 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9294 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 84216ef0
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -446,6 +446,9 @@ class BaseInlineFormSet(BaseModelFormSet):
    def __init__(self, data=None, files=None, instance=None,
                 save_as_new=False, prefix=None):
        from django.db.models.fields.related import RelatedObject
        if instance is None:
            self.instance = self.model()
        else:
            self.instance = instance
        self.save_as_new = save_as_new
        # is there a better way to get the object descriptor?
+26 −0
Original line number Diff line number Diff line
@@ -107,6 +107,17 @@ class Membership(models.Model):
    date_joined = models.DateTimeField(default=datetime.datetime.now)
    karma = models.IntegerField()

# models for testing a null=True fk to a parent
class Team(models.Model):
    name = models.CharField(max_length=100)

class Player(models.Model):
    team = models.ForeignKey(Team, null=True)
    name = models.CharField(max_length=100)
    
    def __unicode__(self):
        return self.name

__test__ = {'API_TESTS': """

>>> from datetime import date
@@ -701,4 +712,19 @@ False
>>> formset.is_valid()
True

# inlineformset_factory tests with fk having null=True. see #9462.
# create some data that will exbit the issue
>>> team = Team.objects.create(name=u"Red Vipers")
>>> Player(name="Timmy").save()
>>> Player(name="Bobby", team=team).save()

>>> PlayerInlineFormSet = inlineformset_factory(Team, Player)
>>> formset = PlayerInlineFormSet()
>>> formset.get_queryset()
[]

>>> formset = PlayerInlineFormSet(instance=team)
>>> formset.get_queryset()
[<Player: Bobby>]

"""}