Django

Code

Changeset 9293

Show
Ignore:
Timestamp:
10/28/08 15:01:03 (2 months ago)
Author:
brosner
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/forms/models.py

    r9239 r9293  
    447447                 save_as_new=False, prefix=None): 
    448448        from django.db.models.fields.related import RelatedObject 
    449         self.instance = instance 
     449        if instance is None: 
     450            self.instance = self.model() 
     451        else: 
     452            self.instance = instance 
    450453        self.save_as_new = save_as_new 
    451454        # is there a better way to get the object descriptor? 
  • django/trunk/tests/modeltests/model_formsets/models.py

    r8861 r9293  
    107107    date_joined = models.DateTimeField(default=datetime.datetime.now) 
    108108    karma = models.IntegerField() 
     109 
     110# models for testing a null=True fk to a parent 
     111class Team(models.Model): 
     112    name = models.CharField(max_length=100) 
     113 
     114class Player(models.Model): 
     115    team = models.ForeignKey(Team, null=True) 
     116    name = models.CharField(max_length=100) 
     117     
     118    def __unicode__(self): 
     119        return self.name 
    109120 
    110121__test__ = {'API_TESTS': """ 
     
    702713True 
    703714 
     715# inlineformset_factory tests with fk having null=True. see #9462. 
     716# create some data that will exbit the issue 
     717>>> team = Team.objects.create(name=u"Red Vipers") 
     718>>> Player(name="Timmy").save() 
     719>>> Player(name="Bobby", team=team).save() 
     720 
     721>>> PlayerInlineFormSet = inlineformset_factory(Team, Player) 
     722>>> formset = PlayerInlineFormSet() 
     723>>> formset.get_queryset() 
     724[] 
     725 
     726>>> formset = PlayerInlineFormSet(instance=team) 
     727>>> formset.get_queryset() 
     728[<Player: Bobby>] 
     729 
    704730"""}