как «игнорировать данные и оставить экземпляр как есть» в обновлении ModelSerializer - PullRequest
0 голосов
/ 17 апреля 2020

В моих моделях есть поле, которое является ImageField, и каждый раз, когда я пытаюсь обновить данные с помощью API с возможностью просмотра. API возвращает ошибку для моего ImageField, которая равна Отправленные данные не были файлом. Проверьте тип кодировки в форме. , когда она пуста, но в экземпляре это не .

Как я могу игнорировать данные и оставить экземпляр как есть при обновлении? Но когда я загружаю изображение в поле изображения, ошибка не возвращается.

Модель

class Report(models.Model):
    # other fields
    image = models.ImageField(upload_to="reports/image-report/", max_length=1000, null=True, blank=True)

Сериализатор

class ReportSerializer(serializers.ModelSerializer):
    # other fields
    image = serializers.ImageField(max_length=None, allow_empty_file=True, use_url=True)

    class Meta:
        model = Report
        fields = "__all__"

    def update(self, instance, validated_data):
        # other fields
        instance.image = validated_data.get('image', instance.image)
        instance.save()

        return instance

Просмотр

class ReportViewSet(viewsets.ModelViewSet):
    queryset = Report.objects.all()
    serializer_class = ReportSerializer
    permission_classes = [IsAuthenticated]
    parser_classes = (MultiPartParser, FormParser) # for uploading attachments
    pagination_class = LimitOffsetPagination

1 Ответ

0 голосов
/ 17 апреля 2020

Глупая ошибка, мне удалось решить проблему, добавив required = False

...