从django-filter的generic.ListAPIView类获取请求对象

时间:2019-07-09 18:46:51

标签: python-3.x django-rest-framework django-filter

我有一个使用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')

1 个答案:

答案 0 :(得分:0)

您可以覆盖get_queryset(self)方法,而不是直接定义queryset属性:

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')