RetrieveUpdateDestroyAPIView поле изображения, когда я обновляю поле в django rest framework

я создал этот api, который имеет модель коллекции, где есть поле изображения. Часть создания списка и коллекции не является проблемой, но часть детализации, особенно обновление имеет проблему, когда я хочу обновить поле, я получаю ошибку, потому что поле изображения не заполнено.

Как я могу это исправить, я бы хотел, чтобы если я не буду менять изображение, то файл останется прежним.

модель

class Collection(models.Model):
    name = models.CharField(max_length = 255)
    description = models.TextField()
    discount = models.PositiveIntegerField(default = 0)
    image = models.ImageField(upload_to ='collection/')
    active = models.BooleanField(default = False)

    def __str__(self):
        return self.name

serializer

class CollectionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Collection
        fields = ('id', 'name', 'description', 'discount', 'image', 'active')

просмотров

class CollectionDetail(generics.RetrieveUpdateDestroyAPIView):

    queryset = Collection.objects.all()
    serializer_class = CollectionSerializer

url

path('collections/', CollectionListCreate.as_view(), name="collections-list"),
path('collections/<int:pk>/', CollectionDetail.as_view(), name="collection-detail"),

В соответствии с вашей моделью, поля Discount и Active имеют значения по умолчанию. Все остальное является обязательным полем при создании и обновлении объекта.

Если поле изображения не является обязательным, вы можете добавить blank=True к полю изображения, чтобы оно не требовалось при отправке формы.

image = models.ImageField(upload_to ='collection/', blank=True)

ИЛИ

вы можете добавить required=False в сериализатор,

class CollectionSerializer(serializers.ModelSerializer):
    image = serializers.ImageField(required=False)
    
    class Meta:
        model = Collection
        fields = ('id', 'name', 'description', 'discount', 'image', 'active')
Вернуться на верх