小编nea*_*170的帖子

Django:限制多次上传的文件类型

我对 Django 还很陌生,并且已经找到了一些关于如何限制通过 Django 的 FileField 上传的文件类型的优秀 答案。但是,这些答案涉及单个文件上传的情况。我正在处理多个文件上传的情况,如下所示:

表格.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'
                              )
Run Code Online (Sandbox Code Playgroud)

模型.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])
Run Code Online (Sandbox Code Playgroud)

验证器.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.')
Run Code Online (Sandbox Code Playgroud)

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

目前,clean_docfile 似乎只检查按字母顺序最后出现的文件名。因此,文件选择 [A.txt, B.txt, C.png] 不会上传(按预期),但 [A.txt, …

python django filefield multiple-file-upload

5
推荐指数
0
解决办法
790
查看次数

标签 统计

django ×1

filefield ×1

multiple-file-upload ×1

python ×1