DRF - MultiPartParse во время почтового запроса - PullRequest
0 голосов
/ 07 апреля 2019

Я довольно новичок в 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), я должен делать вещи по-другому? Есть ли лучший подход к этой проблеме?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...