【问题标题】:How to get a request object from inside the generic.ListAPIView class for django-filter?如何从 django-filter 的 generic.ListAPIView 类中获取请求对象?
【发布时间】:2019-11-19 09:14:29
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您可以覆盖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')
    

    【讨论】:

    • @HarshNagarkar 我很高兴它有帮助。确保也支持答案。 :)
    • 是的,这就是答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2020-07-04
    • 1970-01-01
    • 2021-09-09
    • 2012-03-26
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多