如何在Django Rest Framework中过滤器链式使用

2 投票
1 回答
1129 浏览
提问于 2025-04-18 16:21

我在使用Django Rest Framework的时候,有一个过滤器的混合类。目前你只能根据当前用户或者项目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)

我可以为每个过滤器创建一个新的混合类,然后使用Super(),这样是可行的,但我想避免这样做。

1 个回答

2

给你看看...

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

撰写回答