Я немного сбит с толку относительно цели этого представления.
Метод retrieve
правильно используется, когда он извлекает указанный объект c из списка наборов запросов, используя pk. IE, один из ваших объектов LocationInfo. Это всегда запрос get.
В вашем методе получения также отсутствует параметр pk, который по умолчанию иногда равен None. retrieve(self, request, pk=None)
Если бы вы были на вашем месте, я бы создал для этого совершенно отдельный метод представления или метод / действие.
Вместо использования retrieve
для этого мы можем создать полностью новый метод:
from rest_framework.decorators import action
class LocationInfoViewSet(ModelViewSet):
# Order all objects by id, reversed.
queryset = LocationInfo.objects.all().order_by('-id')
serializer_class = LocationInfoSerializer
# {The rest of your methods, etc...}
@action(detail=False, methods=["post"])
def last_object_by_user(self, request, *args, **kwargs):
# your query to get the last object by your user
queryset = LocationInfo.objects.filter(created_by=request.user).latest()
# The rest of your code
Это создаст новую конечную точку с именем / {name} / last_object_by_user /, к которой вы можете отправлять запросы.
Вы также заметили, что я изменил Ваш набор запросов немного. Ваш текущий набор запросов дает нам последнее LocationInfo, созданное любым пользователем. Вы создали поле в LocationInfo, которое отслеживает, кто создал это LocationInfo?
Вот документация для этого: Пометка дополнительных действий для маршрутизации
Примечание: я не проверял это код, так что если вы скопируете и вставите это, это может не сработать, но идея в том, что важно.