Я довольно новичок в DRF, я работаю над личным проектом, который состоит из API (DRF) и front (React). На передней панели будет форма, позволяющая вводить некоторые поля (Автор, год ...) и отправлять вместе с ней кучу изображений.
У меня есть две модели , которые выглядят примерно так
class Image(models.Model):
image = models.ImageField(upload_to='documents/%Y/%m/%d')
...
class Data(models.Model):
title = models.CharField(max_length=256)
...
images = models.ManyToManyField(Image)
Сериализаторы уже созданы, все работает нормально, если я загружаю сначала изображения, а затем (например, на портале Django) создаю Данные с идентификаторами изображений, но я бы хотел отправить только один запрос от фронт, с данными и файлами , и обрабатывает все операции на стороне сервера (вместо отправки изображений одно за другим, а затем делает второй запрос)
Итак, на моем views.py я создал один метод, который обрабатывает POST и GET данных, в части POST я намерен создать следующее
elif request.method == 'POST':
data = MultiPartParser().parse(request.data)
images = []
for image in data.files:
new_Image = Image(image, ...)
new_Image.save()
images.append(new_Image)
data = Data(data.author, ...)
data.images.add(images)
serializer = DataSerializer(data, many=True)
if serializer.is_valid():
instance = serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
У меня две проблемы ,
Во-первых, multipartparser у меня не работает, он постоянно выдает ошибку при запросе Keyerror
Во-вторых, это действует забавным образом, MultiPartParser (). Parse (...) вызывается дважды , сначала из _parser (что, честно говоря, я не знаю, откуда это происходит ) а затем с мой метод . Первый не вызывает никаких ошибок и содержит всю необходимую информацию из запроса (данные и файлы), второй, тот, который я делаю, - тот, который дает мне эту ошибку.
Что я делаю не так? Я не использовал обычный формат классов viewsets.ModelViewSet, так как я хочу изучить вещи более подробно (например, сделал нумерацию страниц для данных GET), я должен делать вещи по-другому? Есть ли лучший подход к этой проблеме?
Заранее спасибо!