如何查询'或'查询字符串参数对RESTful API的条件是什么?

时间:2015-06-12 04:06:47

标签: django rest django-rest-framework

许多人都说开发人员在使用条件查询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] ...

那么将条件添加到查询字符串中是否有任何简洁,简洁和安静的方法?

2 个答案:

答案 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的更多信息。