summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2008-10-28 20:03:56 +0000
committerBrian Rosner <brosner@gmail.com>2008-10-28 20:03:56 +0000
commit38d9b0919bb07f4dcfcf22a9013b1a711f54ab89 (patch)
treed60379ee21966a5271ee60927acf666f8eae2a22
parent84216ef05e6099235559a9a018bf4e0ad6ecff70 (diff)
[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
-rw-r--r--django/forms/models.py5
-rw-r--r--tests/modeltests/model_formsets/models.py26
2 files changed, 30 insertions, 1 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 180aec60db..0c98f52660 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -446,7 +446,10 @@ 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
- self.instance = instance
+ 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?
self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name()
diff --git a/tests/modeltests/model_formsets/models.py b/tests/modeltests/model_formsets/models.py
index 3c97931595..215f35b59a 100644
--- a/tests/modeltests/model_formsets/models.py
+++ b/tests/modeltests/model_formsets/models.py
@@ -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>]
+
"""}