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")