【问题标题】:How to check if a string contains any one of the value of a list in a query in Django ORM如何检查字符串是否包含Django ORM查询中列表的任何值
【发布时间】:2016-04-27 07:13:45
【问题描述】:

我需要创建一个查询,我想在其中检查“Answer_String”字段是否包含列表中的任何值。

我是这样做的:

q=queryset.filter(reduce(operator.and_, (Q(answer_string__contains = item) for item in answerList)))

没有。用户可以从中选择多个答案的复选框,我已经创建了列表。 answer_string 字段中的任何值都可以在字符串中包含多个答案。但我想检查字符串是否包含列表中的任何一个值,它应该将其视为是。

我写的这个查询返回零结果。有什么帮助吗?

【问题讨论】:

    标签: python mysql django django-orm


    【解决方案1】:

    如果您想检查字段是否包含列表的“任何”值,请使用operator.or_

    operator.and_ 通过and 连接较小的 Q 对象。因此,您当前的查询正在搜索包含所有列表值的字段值。

    【讨论】:

      【解决方案2】:

      我认为这应该可行

      queryset.filter(answer_string__in = answerList)
      

      另外,我认为你不应该使用 operator.and_ 而应该使用 operator.or_

      也检查这个链接 Filter Django database for field containing any value in an array

      【讨论】:

      • answer_string 可能类似于:“This is my answer”,而列表中只有“answer”。这可能会使条件失败。
      • 所以我没有在问题中提到这一点。我现在会更新它。
      • 好的,在这种情况下,您是否尝试使用 operator.or_
      • 是的,更新它会有所帮助
      • 是的,我尝试过并且还获取了从它生成的 sql 查询并运行它,它给出了错误,即语法错误
      猜你喜欢
      • 2016-01-27
      • 1970-01-01
      • 2014-08-09
      • 2012-11-15
      • 2017-02-10
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      相关资源
      最近更新 更多