许多人都说开发人员在使用条件查询RESTful API时应该使用查询字符串参数。
我同意他们的意见,我在我的django-rest-framework项目中使用django和平地实现RESTful API,直到我遇到需要使用或条件查询的情况,不是查询字符串中&
字符支持的和条件。
例如,如果我想查询本周最近修改的日志历史记录,它将类似于:
my-site/api/log?created=-7,*&modified=-3,*
但由于查询字符串使用&
附加参数,因此无法找到任何优雅的解决方案来使用或条件过滤我的资源。
我正在寻找的是:
my-site/api/log?created=-1[OR]created=-2[OR] ...
那么将或条件添加到查询字符串中是否有任何简洁,简洁和安静的方法?
答案 0 :(得分:0)
这是我的想法:
您可以调整api的get_queryset()
:
def get_queryset(self):
"""
Override get_queryset() to filter on multiple values for 'created'
"""
created = self.request.QUERY_PARAMS.get('created', None)
if created:
created_list = created.split(',')
if len(created_list)>1:
queryset = yourmodel.objects.filter(created__in=created_list)
elif len(created_list) == 1:
queryset = yourmodel.objects.filter(created=created_list[0])
return queryset
请求将是:
单一请求:my-site/api/log?created=-7
多请求:my-site/api/log?created=-7,6,1,2
答案 1 :(得分:0)
重复kwarg
>>> from django.http import QueryDict
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.getlist('a')
[u'1', u'2', u'3']
>>> q.get('a')
u'3'
有关docs中的QueryDict
的更多信息。