AdamW
AdamW

Reputation: 1061

Pre-Populating Model-Formsets With Multiple Model Instances

I am building a football predictions app whilst learning django and have the following models:

class Team(models.Model):
     Name = models.CharField(max_length=30)

class Fixture(models.Model):
     HomeTeam = models.ForeignKey(Team, related_name='HomeTeamRef')
     AwayTeam = models.ForeignKey(Team, related_name='AwayTeamRef')
     HomeTeamScore = models.IntegerField(null=True, blank=True)
     AwayTeamScore = models.IntegerField(null=True, blank=True)
     Date = models.DateField()

class Player(models.Model):
     User = models.ForeignKey(User)
         DefaultHomeScore = models.IntegerField()
         DefaultAwayScore = models.IntegerField()

class Prediction(models.Model):
     Fixture = models.ForeignKey(Fixture)
     HomeTeamScore = models.IntegerField()
     AwayTeamScore = models.IntegerField()
     Date = models.DateTimeField()
     Player = models.ForeignKey(Player)

I have many fixture objects populated and have been using model formsets based on the Prediction model to render a view which allows the user to enter scores.

The problem is that they must choose which fixture the prediction relates to. I would like to pre-populate this so they get a list of fixtures and just enter the hometeamscore and awayteamscore. This involves pre-poulating the Prediction.Fixture field and Prediction.Player field but I am unsure on how to go about this?

Any help is much appreciated.

Edit: The problems seems to be how to pass multiple instances of Fixture into a Prediction model formset, I have seen examples of passing one but would like to do this all in one go. I also would like the user to be able to make one Prediction per Fixture.

Upvotes: 0

Views: 3257

Answers (1)

ubiquitousthey
ubiquitousthey

Reputation: 467

I think this is what you are looking for: https://docs.djangoproject.com/en/1.7/topics/forms/formsets/#using-initial-data-with-a-formset

Your code would look something like this:

initial_data = []
for fixture in fixtures:
    initial_data.append({'Player':player,'Fixture':fixture})

formset = MyPredictionFormset(initial=initial_data)

P.S. Not to be pedantic, but your field names are not PEP 8 compliant. They should be lowercase with underscores, but it's your call. (http://www.python.org/dev/peps/pep-0008/)

Upvotes: 5

Related Questions