Django rest фильтрует данные по полю

#django-rest-framework

Вопрос:

Контроллер:

 class TicketMessageSerializerView(generics.RetrieveAPIView):
    queryset = TicketMessage.objects.all()
    serializer_class = TicketMessageSerializer
 

Как отфильтровать список сообщений по полю ticket_id, значение которого взято из URL:

 path('api/tickets/<int:ticket_id>/messages/',
      views.TicketMessageSerializerView.as_view()),
 

Комментарии:

1. В DRF вы можете легко взять объект по pk. Но я не нашел той функциональности, которая мне нужна …

2. Не могли бы вы поделиться своей TicketMessage моделью?

Ответ №1:

В этом случае вы работаете с a ListAPIView (так как вы возвращаете список объектов), и вы можете переопределить get_queryset метод, чтобы указать, какие TicketMessage объекты должны быть возвращены, поэтому:

 class TicketMessageSerializerView(generics.ListAPIView):
    queryset = TicketMessage.objects.all()
    serializer_class = TicketMessageSerializer

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            ticket_id=self.kwargs['ticket_id']
        ) 

Комментарии:

1. Спасибо! Это сработало для меня. Я пробовал использовать ListAPIView, но с функцией get (facepalm)