2010-12-23 106 views
2

我试图用Django使用模型formsets。当我加载表单模板时,我发现它已经填满了以前的值。有我应该停止的缓存机制,或者是什么?Django模型Formset预填充值问题

感谢您的帮助,这是我的代码:

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) 

模板:

<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> 
+0

它充满了以前的值?像你输入表单的最后一项?它绝对不应该用你写的代码来做。你从头开始初始化表单 - 没有数据。你能提供更多关于什么值出现的细节吗?你总是可以尝试抛出never_cache装饰器,但这太奇怪了。 – 2010-12-23 20:15:35

回答

6

这里的主要问题是在行:

formset = FooFormSet(prefix='foo_prefix') 

当你实例FooFormSet()用于生成表单的queryset是(默认):

FooModel.objects.all() 

所以,如果您的数据库中已经有一些FooModel(),它们将被列出。在这种情况下,你可以使用:

formset = FooFormSet(prefix='foo_prefix', queryset=FooModel.objects.none()) 

你可以看到这个在Django的文档的详细信息:

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset