0

我正在尝试做类似的事情:

Django:如何为允许多个文件上传的字段编写一个干净的方法?

用户可以使用上传一个或多个文件

<input type="file" name="images" multiple="multiple">

如果我使用接受的答案中提供的代码......

def clean_images(self):
    files = self.files.getlist('images')
    for file in files:
        if file:
            if file._size > 15*1024*1024:
                raise forms.ValidationError("Image file is too large ( > 15mb ).")
        else:
            raise forms.ValidationError("Could not read the uploaded file.")
    return files

... 然后 do ,如果任何上传的文件有问题form.is_valid(),它将返回。False

我想做的是能够确定哪些文件是干净的,哪些不是,处理有效的文件,并告诉用户为什么无效的文件是无效的。

那么,是否可以在每个文件的基础上应用 clean 方法——即,将getlist循环从 clean 方法中拉出,而是从循环中运行 clean 方法?

4

1 回答 1

1

我的 2 美分:您应该为此绕过表单验证框架。将错误附加到表单字段名称已大量内置于框架中。

相反,为什么不将自定义错误存储在表单对象的属性或方法中?

{% if form.images.errors %}
    {% for image, error in form.more_detailed_images_errors %}
       Your image {{ image }} has an error: {{ error }}
    {% endfor %%
{% endif %}

class MyForm(...):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.more_detailed_image_errors = []

    def clean_images(self):
        #...
        for image in images:
            # validate image
            if image_is_invalid:
                error_msg = 'This image is invalid for reason X'
                # presumably this is your dynamic error message
                self.more_detailed_image_errors.append((image, error_msg))
        if self.more_detailed_image_errors:
            raise ValidationError("You've uploaded invalid images")
于 2013-06-13T20:44:58.860 回答