Использование метода замены списка django -filter в drf - PullRequest
0 голосов
/ 26 мая 2020

Я использую django -фильтр для фильтрации моих наборов просмотров в drf.

Когда у меня ModelViewset, отлично работает, как в примере ниже:

class MyExampleViewSet(viewsets.ModelViewSet):
    queryset = myqueryset
    model = ModelExample
     filter_backends = (DjangoFilterBackend, OrderingFilter,)
     filterset_fields = {
         "field_example": ["exact", "icontains"],
         "another_field_example": ["exact", "range"],
     }
     serializer_class = MyExampleViewSet

Моя проблема это когда я переопределяю метод list, используя ViewSet, например:

class MyExampleViewSet(viewsets.ViewSet):
    def list(self, request, queryset=queryset, *args, **kwargs):
        return something

В этом случае мои фильтры не работают. Есть ли способ использовать в этом случае django -фильтр (список замены)?

Я знаю, что можно делать с query_params, но я хотел бы использовать django -filter.

1 Ответ

1 голос
/ 26 мая 2020

Во-первых, вы должны взглянуть, как реализован метод list:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)

Django -фильтр применяется в этой точке queryset = self.filter_queryset(self.get_queryset()).

Итак, если вы хотите переопределить метод списка, но сохранить функцию фильтрации, обязательно вызовите self.filter_queryset() с набором запросов.

...