Django:在MULTIPLE上传时限制文件类型

时间:2017-05-26 08:27:52

标签: python django filefield multiple-file-upload

我还是Django的新手,并且发现了一些关于如何限制通过Django的FileField上传的文件类型的excellent answers。但是,这些答案涉及单个文件上载的情况。我正在处理多文件上传的情况,如下所示:

forms.py

from django.core.exceptions import ValidationError

class DocumentForm(forms.Form):
    def clean_docfile(self):
        file = self.cleaned_data["docfile"]

        if not file.name.endswith('.txt'):
            raise ValidationError(u'Error: Text files only.')

        return file

    docfile = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}),
                              label='Select some files'
                              )

models.py

from django.db import models
from myproject.myapp.validators import validate_file_extension

class Document(models.Model):
    docfile = models.FileField(upload_to=_upload_path, validators = [validate_file_extension])

validators.py

from django.core.exceptions import ValidationError

def validate_file_extension(value):
    if not value.name.endswith('.txt'):
        raise ValidationError(u'Error: Text files only.')

我希望用户能够一次上传多个文件,但如果至少有一个文件是不正确的文件类型,则会拒绝所有文件。

目前,clean_docfile似乎只检查最后按字母顺序排列的文件的名称。因此,文件选择[A.txt,B.txt,C.png]不上传(按预期),但[A.txt,B.png,C.txt]上传(当它不应该上传时) )。当我在clean_docfile函数中查看对象self.cleaned_data [" docfile"]的值时,它似乎只存储最后按字母顺序显示的文件的属性。如何恢复所有上传的文件名?

0 个答案:

没有答案