Объект типа Logo не поддерживает сериализацию в формате JSON - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать django rest api, который будет получать изображения из лицевой части, а также обрабатывать их через REST APi, проблема в том, что даже если я могу публиковать данные в django через PostMan, я все равно получаю сообщение об ошибкеТип 'Logo' не поддерживает сериализацию в формате JSON. Данные уже есть в базе данных, но я хотел бы решить эту проблему, но не знаю, с чего начать, попытался изменить отклик на JsonResponse, но он не дал эффекта

Модель

class Logo(models.Model):
    name = models.CharField(max_length=60)
    preview = models.ImageField()
    thumb = models.ImageField()
    thumbL = models.ImageField()
    dataL = models.TextField(blank=False)
    thumbS = models.ImageField()
    dataS = models.TextField()
    posL = models.CharField(max_length=60)
    posS = models.CharField(max_length=60)

    def __str__(self):
        return str(self.name)

Сериализация:

class LogoSerializer(serializers.ModelSerializer):
    posL = serializers.CharField(required=False)
    posS = serializers.CharField(required=False)
    dataL = serializers.CharField(required=False)
    dataS = serializers.CharField(required=False)


    class Meta:
        model = Logo
        fields = ('__all__')

        def create(self, validated_data):
            return Logo.objects.create(**validated_data)

и просмотр:

class LogoViewSet(viewsets.ViewSet):
    parser_classes = (MultiPartParser, FormParser)
    def list(self, request, *args, **kwargs):
        queryset = Logo.objects.all()
        serializer = LogoSerializer(queryset, many=True)

        return Response(serializer.data)

    def post(self, request, *args, **kwargs):
        serializer = LogoSerializer(data=request.data)


        if serializer.is_valid():
            serializer.validated_data['posL'] = positionL
            serializer.validated_data['posS'] = positionS
            bg = serializer.save()
            return Response(bg, status=status.HTTP_201_CREATED)

        else:
            bg = serializer.errors
            return Response(bg, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

1 голос
/ 28 октября 2019

Согласно документам вы должны использовать serializer.data вместо bg в своем ответе.

Итак return Response(serializer.data, status=status.HTTP_201_CREATED)

Причина этого заключается в том, чтовы передаете экземпляр модели Django, который на самом деле не имеет полей в необработанном сериализуемом формате JSON, а представляет собой более сложный объект с полями в формате CharFields, ImageFields, а также мета-свойство, которое определяетнекоторые свойства модели, такие как таблица базы данных и т. д.

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