【问题标题】:Django: how to filter for rows whose fields are contained in passed value?Django:如何过滤其字段包含在传递值中的行?
【发布时间】:2010-11-24 19:15:12
【问题描述】:

MyModel.objects.filter(field__icontains=value) 返回field 包含value 的所有行。反其道而行之怎么办?即构造一个查询集,返回field包含value中的所有行?

最好不使用自定义 SQL(即仅使用 ORM)或不使用后端相关 SQL。

【问题讨论】:

    标签: sql django django-models


    【解决方案1】:

    field__icontains 和类似的代码直接编码到 ORM 中。其他版本 simple 不存在。

    您可以使用reference for QuerySet 下描述的where 参数。

    在这种情况下,你会使用类似的东西:

    MyModel.objects.extra(where=["%s LIKE CONCAT('%%',field,'%%')"], params=[value])
    

    当然,请记住,没有标准的跨 DMBS 连接方法。据我所知,没有办法满足您避免依赖后端SQL的要求。

    如果您可以使用字典列表而不是查询集,您可以随时这样做:

    qs = MyModel.objects.all().values()
    matches = [r for r in qs if value in r[field]]
    

    虽然这对于庞大的数据集当然不是理想的。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2012-02-15
      • 2016-01-02
      • 2022-08-04
      • 1970-01-01
      • 2021-10-23
      • 2021-11-03
      • 2021-11-23
      • 2014-04-06
      相关资源
      最近更新 更多