在查询字符串中使用OR语句的首选方法是什么?

时间:2014-02-25 14:18:01

标签: django api query-string tastypie url-parsing

我正在用django-tastypie编写API。 API使用查询字符串过滤对象。

例如:如果我想找到有' foo'在first_name中,我将此查询字符串提供给API端点以进行过滤:

myapi/customers/?first_name__icontains=foo

对于找到有' foo'以名字 AND ' bar'姓氏:

myapi/customers/?first_name__icontains=foo&last_name__icontains=bar

我想找到有“foo”的客户。名字 OR 姓氏。但我不知道在查询字符串中指定OR过滤器的最佳方法是什么。

一个选项:我可以在查询字符串中使用||解析并在服务器端解析它,如下所示,但我不知道这是一个首选方法:

myapi/customers/?first_name__icontains=foo||last_name__icontains=foo

我看到使用查询字符串过滤结果的API,但我没有找到任何相关文章在查询字符串中进行OR过滤。这种做法错了吗?如果没有;

在查询字符串中使用OR语句的最佳方法是什么?

注意:django-tastypie使用__icontains进行数据库中的搜索,忽略它:

last_name__icontains=foo等于SQL中的last_name ilike '%foo%'

1 个答案:

答案 0 :(得分:0)

我对tastypie没有任何经验,但是,在django中使用Q https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-object做或查询。

因此,在tastypie中允许您定义返回的查询的任何地方都可以。

Customer.objects.filter(Q(first_name__icontains='foo') | Q(last_name__icontains='bar'))

注意:如果对象与两个参数都匹配,则会返回此对象两次。如果这是一个问题,请使用.distinct()。但是,这是一个昂贵的数据库。