django fileupload via modelform:form无效

时间:2014-12-04 14:04:28

标签: python django django-models django-forms

我有一个像这样的简单上传模型:

class UploadFile(models.Model):
    file_field = models.FileField(upload_to='files/%Y/%m/%d')

和相应的模型形式如下:

class UploadFileForm(forms.ModelForm):

    class Meta:
        model = UploadFile

        fields = (\
            "file_field", \
                )

我的观点也很简单,就像这样:

def home(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        print request.POST, request.FILES
        if form.is_valid():
            print "yes, form is valid"
        else:
            print form.errors
    <rest of the view code here..>

现在,我总是得到这个错误:

<ul class="errorlist"><li>file_field<ul class="errorlist"><li>This field is required.    </li></ul></li></ul>

有趣的是,当我将模型名称从file_field更改为file时 - 一切都按预期工作!理想情况下,我想将字段命名为file_field,而不只是file

我确实看到查询字典看起来像这样:

<QueryDict: {u'csrfmiddlewaretoken': [u'xCSgqBdgdKlZ0nUUcTICL1YvYn1k5']}>   <MultiValueDict: {u'file': [<InMemoryUploadedFile: fileersd.pdf (application/pdf)>]}>

如何告诉django file_field基本上是来自上面查询字典的file

所以,当我想绑定表单时:

form = UploadFileForm(request.POST, request.FILES)

我想说我的模型/表单中的file_fieldrequest.FILES['file']相同..如果这有意义吗?

1 个答案:

答案 0 :(得分:0)

如果您声明使用了dropzone.js会有所帮助,因为看起来问题完全存在。查看该库的the docs,我看到以下内容:

  

如果您想要其他名称而不是file,则可以使用paramName选项配置dropzone。

因此您应该只需将paramName: "file_field"添加到Dropzone.options.myDropzone对象。