问题
I have a form for uploading images.
If I follow Django's standard for cleaning a specific field attribute of a form, this is what my clean method would typically look like:
class UploadImagesForm(forms.Form):
image = forms.FileField()
def clean_image(self):
file = self.cleaned_data['image']
if file:
if file._size > 15*1024*1024:
raise forms.ValidationError("Image file is too large ( > 15mb ).")
return file
else:
raise forms.ValidationError("Could not read the uploaded file.")
However, I'm using a form that allows multiple images to be uploaded at once, all through the same widget (ie, the user can Shift+click to select several files on the file browser). So whenever I need to access the files in a view or in a handler, I use something like request.FILES.getlist('images')
in a for loop. How the hell do I write a clean method for this field?? I'm lost.
Here's what my form looks like.
class UploadImagesForm(forms.Form):
images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'}))
I would like the field's clean method to check the file size of each file submitted, as illustrated in the first block of code above.
回答1:
Use self.files.getlist('images')
in clean
method to iterate over multiple images:
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
来源:https://stackoverflow.com/questions/14392700/django-how-to-write-a-clean-method-for-a-field-that-allows-mutiple-file-uploads