0

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

例如:如果我想查找 first_name 中包含“foo”的客户,我将此查询字符串提供给 API 端点进行过滤:

myapi/customers/?first_name__icontains=foo

查找名字中有“foo”和姓氏有 bar”的客户:

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

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

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

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

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

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

注意:django-tastypie 使用__icontainsfor like search 在数据库中,忽略它:

last_name__icontains=foo等于last_name ilike '%foo%'在 SQL 中。

4

1 回答 1

0

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

因此,无论在哪里可以定义返回的查询。

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

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

于 2014-02-25T14:22:53.473 回答