DRF POST изображение и текст одновременно - PullRequest
0 голосов
/ 04 октября 2019

Вот как выглядит моя модель:

class ExampleModel(models.Model):
    text = models.CharField(max_length=2)
    image = models.ImageField(upload_to='Thats all set. Dont worry about it.')

У меня есть стандартный сериализатор:

class ExampleSerializer(serializers.ModelSerializer):
    class Meta:
        model = ExampleModel
        fields = "__all__"

И вот мое мнение:

class ExampleView(viewsets.ModelViewSet):
    queryset = ExampleModel.objects.all()
    serializer_class = ExampleSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    parser_classes = (MultiPartParser, FormParser)

    def post(self, request, *args, **kwargs):
        file_serializer = ExampleSerializer(data=request.data)
        if file_serializer.is_valid():
            file_serializer.save()
            return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

То, что я хочу знать, это
a) Я пытаюсь заполнить поля текста и модели, используя запросы Python.
requests.post(url, headers="The tokens(Already taken care of)", "How to put in the body? Where and how do I add the image and text?"
b) Есть ли что-то, что мне нужно изменить или добавить в мой сериализатор, представление или что-то еще для удовлетворения моих требований?

Любая помощь приветствуется. Спасибо за ваше время, прочитав это:)

РЕДАКТИРОВАТЬ: Кроме того, как я могу обновить объект, который уже существует? Все, что я могу найти для этого, в старшем Джанго.

1 Ответ

0 голосов
/ 04 октября 2019

а) вы можете разместить текст и изображение следующим образом:

image_file = {'image': open('test.jpg', 'rb')}
headers = {
    'Content-Type': 'multipart/form-data',
} 
jsondata = {'text': 'hello_world'}
requests.post(url, headers=headers, data=jsondata, files=image_file)

б) нет необходимости обновлять сериализатор

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