【问题标题】:how to pass initial value of FileField to Formset (in Django)如何将 FileField 的初始值传递给 Formset(在 Django 中)
【发布时间】:2011-01-27 08:24:29
【问题描述】:

我正在尝试使用来自 POST/FILE 请求的数据填充 Django 表单集。我能够填充除 FileField 之外的所有字段。似乎 initial 不能用于将 request.FILE 传递给 FormSet 创建者函数。我的问题是如何将 FILE 传递给 FormSet。

model.py

class ArticleForm(forms.Form):
     docfile = forms.FileField()
     subject = forms.Charfield(max_length=128)

ArticleFormSet = formset_factory(ArticleForm, extra=2)

views.py

formset = ArticleFormSet(request.POST, request.FILE)
#do some other work, and then re-display the POST data

data = formset.cleaned_data
formset = ArticleFormSet(initial=data)

return render_to_response('some.html',
                          {'formset':formset}
                         )

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您不能将初始数据传递给文件字段。 <input type="file" /> 在浏览器呈现时始终为空白。

    要将request.FILES 传递给表单集,只需将其指定为 POST 之后的第二个参数。

    http://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-a-formset-in-views-and-templates

    FormSet(request.POST, request.FILES)

    【讨论】:

    • 更多问题: 1.第二次显示,第一次上传的文件不在request.FILES中。 2.在这种方法中,额外的表单会显示错误信息,因为额外的表单中的所有字段都是空的。如何处理以上问题?
    • @englefly 你能澄清一下吗?代码示例?您是否尝试使用预先填充的数据显示第二个表单集?您可以预填充 HTML 文件上传,期间。让我用一些代码更新我的答案。
    • @englefly 好的,我明白你的意思。无论出于何种原因,即使没有任何错误,您也希望重新显示表单集。问题仍然存在:您永远无法显示带有预填充数据的input type='file' 元素。您必须在第一次成功的 POST 尝试中处理该文件。
    • 如果我们重写小部件的渲染函数,我们可以将预填充数据的 input type='file' 元素显示为任何 html 元素,例如标签。跨度>
    【解决方案2】:

    在处理文件上传时,您不能传递任何初始值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2011-11-22
      • 2010-12-25
      • 2014-03-20
      • 2021-06-30
      • 2011-08-21
      • 2017-05-20
      相关资源
      最近更新 更多