Здравствуйте, у меня проблема с несколькими изображениями в одном поле. Насколько я знаю, в учебнике django они говорят об этом.
for f in request.FILES.getlist('files'):
# do something (validate here maybe)
, в котором я не совсем понимаю. Как сделать ручную проверку? Если да, то почему? В любом случае, есть другой подход, который они предлагают
files = forms.FileField(widget=ClearableFileInput(attrs={'multiple': True})
Этот не работает так, как я хочу. Это self.cleaned_data ['files'] дает только один результат (здесь есть аналогичная проблема), а django / multiupload имел ошибку в моем опыте, и, к сожалению, это было слишком медленно, чтобы исправить: (.
What Я хочу проверять каждый файл и выдавать ошибки каждому через ImageField, потому что мне нравится, что он проверяет файл, а не я сам его кодирую.
Таким образом, я создал код прототипа.
forms.py
class ImageForm(forms.Form):
# validate each image here
image = forms.ImageField()
class BaseForm(forms.Form):
# first form
ping = forms.CharField()
#images = SomeThingMultipleFileField that will raise multiple errors each validate image.
# since no option I decided to do that. below.
# so for decoration that images is required.
images = forms.ImageField()
def handle(self, request, *args, **kwargs):
#custom function
image_list = []
errors = []
# validate each image in images via another form
# if there is errors e.g this field is required will be append to errors = []
for image in request.FILES.getlist('images'):
data = ImageForm(image)
if data.is_valid():
image_list.append(data.cleaned_data['image'])
else:
errors.append(data.errors)
if errors:
# raise errors
# return the data
views.py
def base(request):
# this is an api
# expected input should be from the code or format
# {'ping': 'test', 'images': 1.jpg, 'images': 2.jpg}
# This is not the actual view code.
data = forms.BaseForm(request.POST, request.FILES)
if data.is_valid():
value = data.handle(request)
return JSONResponse({'data': value})
return JSONResponse({'errors': data.errors})
Не элегантно, если честно, но сейчас проблемы и больше нет вариантов, о которых я не могу думать, но это. Проблема в моем коде заключается в том, что
data = ImageForm(image)
не читает файл, поэтому список_изображений всегда пуст
- Так кто-нибудь может мне здесь помочь? Я застрял
- Есть лучший подход?
- Меня также интересует общая ошибка, например, если одно изображение недействительно, оно запускается как {'files': 'Одно из изображений недействительно.'}