如何使用 Django Rest Framework 过滤器将过滤器链接在一起
Posted
技术标签:
【中文标题】如何使用 Django Rest Framework 过滤器将过滤器链接在一起【英文标题】:How to chain filters together using Django Rest Framework filters 【发布时间】: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() 可以工作,但我想避免这种情况。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何使用 Django Rest Framework 过滤器将过滤器链接在一起的主要内容,如果未能解决你的问题,请参考以下文章
django.test.client 上的 Django rest 框架导入错误
无法使用 Django Rest 框架发送压缩的 gzip 数据
Django REST to React - 无需密码即可获取社交身份验证令牌
尽管有 AllowAny 权限,django-rest-framework 在 POST、PUT、DELETE 上返回 403 响应