Django Rest Framework: загрузка изображения в определенный объект существующей модели

Здравствуйте, я пытаюсь загрузить изображение с помощью Rest API [через Postman] в объект, который уже существует, и все его поля заполнены, кроме изображения. Я использую метод PUT, чтобы сначала получить объект, в который я хочу загрузить изображение, а затем пытаюсь передать его через сериализатор. Изображения должны быть загружены в мое ведро S3.
. Код для моего views.py:

@api_view(['PUT'])
@permission_classes([IsAuthenticated])
def putproof(request):
    app=MasterTaskHolder.objects.filter(title=request.data['title'],user=request.user)
    serializer=ImageUploadSerializer(app,data=request.data,partial=True)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    return Response("Posted")    

Мой сериализатор:

class ImageUploadSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MasterTaskHolder
        fields = (
            'title','image'
        )

Моя модель:

class MasterTaskHolder(models.Model):
    status_code = [
        ('C', 'Completed'),
        ('P', 'Pending'),
    ]
    title = models.CharField(max_length=50)
    point = models.IntegerField()
    category = models.CharField(max_length=50, null=True, blank=True)
    status = models.CharField(max_length=2, choices=status_code, default='P')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(null=True, blank=True, upload_to="imageproof/")

    def __str__(self):
        return (f'{self.user} - '+(f'{self.title}'))

Я действительно новичок в Django и DRF, любая помощь будет оценена по достоинству.
Спасибо.

Попробуйте это?

class ImageUploadSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MasterTaskHolder
        fields = (
            'title','image'
        )

    def update(self, instance: MasterTaskHolder, validated_data):
        instance.image = validated_data['image']
        instance.save()
        return instance

В представлениях вместо использования serializer.save() используйте переопределенное обновление, которое мы только что создали

serializer.update(instance, serializer.validated_data)

Также вы отправляете queryset в сериализатор, вам нужно изменить это на сам объект и скромное предложение не забудьте проверить, существует ли этот объект или нет.

Вернуться на верх