Reputation: 177
i'm trying to use model formsets with Django. When i load forms template, i see that it's filled-up with previous values. Is there a caching mechanism that i should stop, or what?
Thanks for your help, here is my code:
models.py
class FooModel( models.Model ):
a_field = models.FloatField()
b_field = models.FloatField()
def __unicode__( self ):
return self.a_field
forms.py
from django.forms.models import modelformset_factory
FooFormSet = modelformset_factory(FooModel)
views.py
def foo_func(request):
if request.method == 'POST':
formset = FooFormSet(request.POST, request.FILES, prefix='foo_prefix' )
if formset.is_valid():
formset.save()
return HttpResponseRedirect( '/true/' )
else:
return HttpResponseRedirect( '/false/' )
else:
formset = FooFormSet(prefix='foo_prefix')
variables = RequestContext( request , { 'formset':formset , } )
return render_to_response('footemplate.html' , variables )
template:
<form method="post" action=".">
{% csrf_token %}
<input type="submit" value="Submit" />
<table id="FormsetTable" border="0" cellpadding="0" cellspacing="0">
<tbody>
{% for form in formset.forms %}
<tr>
<td>{{ form.a_field }}</td>
<td>{{ form.b_field }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ formset.management_form }}
</form>
Upvotes: 2
Views: 2021
Reputation: 7167
The main problem here is in line:
formset = FooFormSet(prefix='foo_prefix')
When you instantiate FooFormSet() the queryset
used to generate the forms is (by default):
FooModel.objects.all()
So, if you already have some FooModel() in your database they will be listed. In this case you can use:
formset = FooFormSet(prefix='foo_prefix', queryset=FooModel.objects.none())
You can see more information about this in Django's Documentation:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
Upvotes: 7