использование objects.latest в наборе запросов DRF вызывает ошибку - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть следующее представление:

from rest_framework.viewsets import ModelViewSet
from .serializers import LocationInfoSerializer
from .models import LocationInfo


class LocationInfoViewSet(ModelViewSet):
    queryset = LocationInfo.objects.latest()
    serializer_class = LocationInfoSerializer

с использованием этого API вызывает следующую ошибку:

TypeError at /locations/
'LocationInfo' object is not iterable

Но если я изменю набор запросов на:

class LocationInfoViewSet(ModelViewSet):
    queryset = LocationInfo.objects.all()
    serializer_class = LocationInfoSerializer

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

ModelViewSet Ожидание предоставления итерируемых объектов. Но метод latest () возвращает один объект. Таким образом, вы получаете сообщение об ошибке при использовании latest () . Если вы хотите вернуть один объект, вы можете использовать поля pk в методе filter () и возвращать набор запросов, содержащий один объект и повторяемый.

class LocationInfoViewSet(ModelViewSet):
    serializer_class = LocationInfoSerializer

    def get_queryset(self):
        return LocationInfo.objects.filter(pk=self.kwargs['pk'])# you can change this filter logic, but you must return iterable objecs here

Если вы хотите вернуть только поля одного объекта, вы можете использовать generics.RetrieveAPIView

0 голосов
/ 23 февраля 2020

Что я в итоге сделал:

from rest_framework.viewsets import ModelViewSet
from .serializers import LocationInfoSerializer
from .models import LocationInfo


class LocationInfoViewSet(ModelViewSet):
    queryset = LocationInfo.objects.filter(id=1).values()
    serializer_class = LocationInfoSerializer

    data = queryset.reverse()[0]
    serialized_data = LocationInfoSerializer(data, many=False)
    points = serialized_data.data.values()
...