【问题标题】:Django Model Formset Pre-Filled Value ProblemDjango Model Formset 预填充值问题
【发布时间】:2011-05-29 23:13:08
【问题描述】:

我正在尝试在 Django 中使用模型表单集。当我加载表单模板时,我看到它充满了以前的值。是否有我应该停止的缓存机制,还是什么?

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

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>

【问题讨论】:

  • 以前的值填满了?就像您在表格中输入的最后一项?它绝对不应该对您编写的代码这样做。您正在从头开始初始化表单——没有数据。您能否详细说明出现了哪些值?你总是可以尝试加入 never_cache 装饰器,但这太奇怪了。

标签: django forms django-forms


【解决方案1】:

这里的主要问题在于:

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

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多