【问题标题】:How to chain filters together using Django Rest Framework filters如何使用 Django Rest Framework 过滤器将过滤器链接在一起
【发布时间】:2014-09-30 10:19:31
【问题描述】:

使用 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() 可以工作,但我想避免这种情况。

【问题讨论】:

    标签: python django django-rest-framework django-orm


    【解决方案1】:

    来吧……

    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
    

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 2020-04-27
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2017-08-17
      相关资源
      最近更新 更多