Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Forms - How to Use Prefix Parameter

Tags:

Say I have a form like:

class GeneralForm(forms.Form):     field1 = forms.IntegerField(required=False)     field2 = forms. IntegerField(required=False) 

And I want to show it twice on a page within one form tag each time with a different prefix e.g.,:

rest of page ... <form ..> GeneralForm(data,prefix="form1").as_table() GeneralForm(data,prefix="form2").as_table() <input type="submit" /> </form> rest of page ... 

When the user submits this, how do I get the submitted form back into two separate forms to do validation, and redisplay it?

This was the only documentation I could find and it's peckish.

like image 292
Greg Avatar asked Oct 22 '08 16:10

Greg


1 Answers

You process each form as you normally would, ensuring that you create instances which have the same prefixes as those used to generate the form initially.

Here's a slightly awkward example using the form you've given, as I don't know what the exact use case is:

def some_view(request):     if request.method == 'POST':         form1 = GeneralForm(request.POST, prefix='form1')         form2 = GeneralForm(request.POST, prefix='form2')         if all([form1.is_valid(), form2.is_valid()]):             pass # Do stuff with the forms     else:         form1 = GeneralForm(prefix='form1')         form2 = GeneralForm(prefix='form2')     return render_to_response('some_template.html', {         'form1': form1,         'form2': form2,     }) 

Here's some real-world sample code which demonstrates processing forms using the prefix:

http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/

like image 132
Jonny Buchanan Avatar answered Sep 22 '22 04:09

Jonny Buchanan