如何使用Django Rest框架过滤器将过滤器链接在一起

2024-05-13 00:09:42 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Django Rest Framework我有一个过滤器混音。目前,您要么过滤currentuser或projectid,但不能同时过滤两者。如何将这些查询链接在一起,以便您可以同时筛选或只筛选其中一个查询?在

 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()来工作,但我想避免这种情况。在


Tags: selfprojecttrue过滤器getreturnifrequest
1条回答
网友
1楼 · 发布于 2024-05-13 00:09:42

给你。。。在

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

相关问题 更多 >