Сериализатор возвращает неверный вывод - PullRequest
3 голосов
/ 28 сентября 2019

У меня есть модель:

class Route(models.Model):
    name = models.CharField("Номер маршрута", max_length=100)
    evotor_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="пользователь эвотор", on_delete=models.CASCADE)
    nds_CHOICES = (
        (0, 'БЕЗ НДС'),
        (1, 'Основная ставка 0%'),
        (2, 'Основная ставка 10%'),
        (3, 'Расчётная ставка 10%'),
        (4, 'Основная ставка 18%'),
        (5, 'Расчётная ставка 18%')
    )
    nds = models.IntegerField('НДС', choices=nds_CHOICES, default=0)
    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Номер маршрута"
        verbose_name_plural = "Номера маршрутов"

И у меня есть сериализатор для этой модели:

class RouteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Route
        fields = ("id", "name", "nds")

Мой APIView

class CarView(APIView):
    authentication_classes = (BearerAuthentication,)
    permission_classes = (IsAuthenticated,)
    def get(self, request):
        if 'route_id' not in request.GET or request.GET['route_id']=="":
            #return Response({'message': 'Не указан ID маршрута'}, status=status.HTTP_400_BAD_REQUEST)
            car = Car.objects.filter(evotor_user=request.user)
        else:
            car = Car.objects.filter(route__id=request.GET['route_id'])
        serializer = CarSerializer(car, many=True)
        print(serializer.data)
        return Response(serializer.data)

используйте этот сериализатор

class CarSerializer(serializers.ModelSerializer):
    route = RouteSerializer
    class Meta:
        model = Car
        fields = ("id", "name", "route")

и должен вернуть мне вывод, подобный этому: [{"id": 1, "name": "dfgdfgdfg", "route": {'id': 1, 'name': 'route_name','nds': 0,}}]

Но возвращается: [{"id": 1, "name": "dfgdfgdfg", "route": 1}]

1 Ответ

0 голосов
/ 28 сентября 2019

CarSerializer.route декларация неверна.Это должен быть экземпляр из RouteSerializer, например:

class CarSerializer(serializers.ModelSerializer):
    route = RouteSerializer(read_only=True)
    class Meta:
        model = Car
        fields = ("id", "name", "route")

Это называется «вложенные отношения», см. Документацию по https://www.django -rest-framework.орг / API-гид / отношения / # вложенные отношения

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