Form (or Formset?) to handle multiple table rows in Django

Posted by Ben on Stack Overflow See other posts from Stack Overflow or by Ben
Published on 2008-11-18T13:55:17Z Indexed on 2010/06/03 9:34 UTC
Read the original article Hit count: 289

Filed under:
|
|

Hi,

I'm working on my first Django application. In short, what it needs to do is to display a list of film titles, and allow users to give a rating (out of 10) to each film. I've been able to use the {{ form }} and {{ formset }} syntax in a template to produce a form which lets you rate one film at a time, which corresponds to one row in a MySQL table, but how do I produce a form that iterates over all the movie titles in the database and produces a form that lets you rate lots of them at once?

At first, I thought this was what formsets were for, but I can't see any way to automatically iterate over the contents of a database table to produce items to go in the form, if you see what I mean.

Currently, my views.py has this code:

def survey(request):
        ScoreFormSet = formset_factory(ScoreForm)
        if request.method == 'POST':
                formset = ScoreFormSet(request.POST, request.FILES)
                if formset.is_valid():
                        return HttpResponseRedirect('/')
        else:
                formset = ScoreFormSet()
        return render_to_response('cf/survey.html', {
                'formset':formset,
        })

And my survey.html has this:

<form action="/survey/" method="POST">
<table>
{{ formset }}
</table>
  <input type = "submit" value = "Submit">
</form>

Oh, and the definition of ScoreForm and Score from models.py are:

class Score(models.Model):
        movie = models.ForeignKey(Movie)
        score = models.IntegerField()
        user = models.ForeignKey(User)

class ScoreForm(ModelForm):
        class Meta:
                model = Score

So, in case the above is not clear, what I'm aiming to produce is a form which has one row per movie, and each row shows a title, and has a box to allow the user to enter their score.

If anyone can point me at the right sort of approach to this, I'd be most grateful.

Thanks,

Ben

© Stack Overflow or respective owner

Related posts about python

Related posts about django