【问题标题】:What is the preferred method for using OR statement within query string?在查询字符串中使用 OR 语句的首选方法是什么?
【发布时间】:2014-02-25 14:18:01
【问题描述】:

我正在用 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。但我不知道在查询字符串中指定 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%'

【问题讨论】:

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


    【解决方案1】:

    我没有任何使用 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()。但是,这是一个昂贵的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多