如何从 django-filter 的 generic.ListAPIView 类内部获取请求对象?

Har*_*kar 2 django-filter python-3.x django-rest-framework

我有一个使用 djangorestframework 运行的 django-filter 查询。下面的视图函数用于 url。但是,当我在开始时获取对象时,我不仅想通过搜索查询具有的用户名和用户 ID 参数来过滤它们。但我也想根据登录的人进行过滤,我可以通过来自 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')
Run Code Online (Sandbox Code Playgroud)

wen*_*isa 5

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')
Run Code Online (Sandbox Code Playgroud)