Skip to main content
 首页 » 编程设计

python之如何使用 Django Rest Framework 过滤器将过滤器链接在一起

2024年10月25日2752php

使用 Django Rest Framework我有一个过滤器 Mixin。目前,您可以过滤当前用户或项目 ID,但不能同时过滤两者。我如何将这些查询链接在一起,以便您可以对两者进行过滤或仅对其中一个进行过滤?

 class FilterMixin(object): 
    """ 
    Applies a set of filters for Lists API calls. 
    """ 
 
    def get_queryset(self, *args, **kwargs): 
        """ 
        Checks if currentuser = true is in the URL and filters this it. 
        """ 
        currentuser = self.request.QUERY_PARAMS.get('currentuser', False) 
        if currentuser == "true": 
            return super(FilterMixin, self).get_queryset(*args, **kwargs).filter(user=self.request.user) 
 
        project = self.request.QUERY_PARAMS.get('project', False) 
        if project: 
            return super(FilterMixin, self).get_queryset(*args, **kwargs).filter(project=project) 
 
        return super(FilterMixin, self).get_queryset(*args, **kwargs) 

我可以为每个过滤器创建一个新的 Mixin 并使用 Super() ,这会起作用,但我想避免这种情况。

请您参考如下方法:

给你...

def get_queryset(self, *args, **kwargs): 
    """ 
    Checks if currentuser = true is in the URL and filters this it. 
    """ 
    queryset = super(FilterMixin, self).get_queryset(*args, **kwargs) 
 
    currentuser = self.request.QUERY_PARAMS.get('currentuser') 
    project = self.request.QUERY_PARAMS.get('project') 
 
    if currentuser == "true": 
        queryset = queryset.filter(user=self.request.user) 
 
    if project: 
        queryset = queryset.filter(project=project) 
 
    return queryset