Django:如何过滤其字段包含在传递值中的行?

时间:2010-11-24 19:15:13

标签: sql django django-models

MyModel.objects.filter(field__icontains=value)会返回field包含value的所有行。如何做相反的事情?即,构造一个查询集,该查询集返回field中包含value 的所有行

最好不使用自定义SQL(即仅使用ORM)或不使用依赖于后端的SQL。

1 个答案:

答案 0 :(得分:3)

field__icontains和类似的代码被编码到ORM中。另一个版本简单不存在。

您可以使用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]]

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