我还是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"]的值时,它似乎只存储最后按字母顺序显示的文件的属性。如何恢复所有上传的文件名?