Python Django:对每个文件而不是每个表单应用clean方法?

Python Django:对每个文件而不是每个表单应用clean方法?,python,django,validation,file-upload,Python,Django,Validation,File Upload,我正在尝试做类似的事情: 用户可以使用上载一个或多个文件 <input type="file" name="images" multiple="multiple"> 。。。然后执行form.is\u valid(),如果上载的任何文件有问题,它将返回False 我想做的是能够确定哪些文件是干净的,哪些不是干净的,处理有效的文件,并告诉用户为什么无效的文件是无效的 那么,是否可以在每个文件的基础上应用clean方法——即,将getlist循环从clean方法中拉出,而从循环中运行c

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

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

<input type="file" name="images" multiple="multiple">
。。。然后执行
form.is\u valid()
,如果上载的任何文件有问题,它将返回
False

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


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

我的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")
{% 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")