MyModel.objects.filter(field__icontains=value)
会返回field
包含value
的所有行。如何做相反的事情?即,构造一个查询集,该查询集返回field
中包含value
的所有行?
最好不使用自定义SQL(即仅使用ORM)或不使用依赖于后端的SQL。
答案 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]]
虽然这对于大型数据集来说当然不是理想的。