Получение объекта запроса из класса generic.ListAPIView для django-фильтра - PullRequest
0 голосов
/ 09 июля 2019

У меня есть запрос фильтра django, выполняемый с использованием djangorestframework.Функция просмотра ниже используется для URL.Но когда я получаю объекты в начале, я хочу отфильтровать их не только по параметрам поискового запроса, которые имеют имя пользователя и идентификатор пользователя.Но я также хочу фильтровать, основываясь на том, кто вошел в систему, что я могу получить с помощью объекта запроса, поступающего с URL.

Функция getUsername () работает независимо, но не с другим кодом.

СледовательноЕсть ли способ получить доступ к самому запросу в приведенном ниже коде.Любая помощь с благодарностью.

class userSearch(generics.ListAPIView):

    def getUsername(self):
        return self.kwargs['username']

    serializer_class = UserSerializer
    queryset = UserProfile.objects.filter(professor=User.objects.get(username=self.getUsername()).id).order_by('username')
    filter_backends = (DjangoFilterBackend,SearchFilter)
    filter_fields = (username,userid,userType)
    search_fields = ('username', 'first_name')

1 Ответ

0 голосов
/ 10 июля 2019

Вместо прямого определения атрибута queryset вы можете переопределить метод get_queryset(self):

class userSearch(generics.ListAPIView):
    serializer_class = UserSerializer
    filter_backends = (DjangoFilterBackend, SearchFilter)
    filter_fields = ('username', 'userid')
    search_fields = ('username', 'first_name')

    def get_queryset(self):
        username = self.kwargs['username']
        professor = User.objects.get(username=username)

        # Here you can do the following thing:
        current_user = self.request.user

        # And use it as you wish in the filtering below:

        return UserProfile.objects.filter(professor=professor).order_by('username')
...