【发布时间】:2010-11-24 19:15:12
【问题描述】:
MyModel.objects.filter(field__icontains=value) 返回field 包含value 的所有行。反其道而行之怎么办?即构造一个查询集,返回field包含在value中的所有行?
最好不使用自定义 SQL(即仅使用 ORM)或不使用后端相关 SQL。
【问题讨论】:
标签: sql django django-models
MyModel.objects.filter(field__icontains=value) 返回field 包含value 的所有行。反其道而行之怎么办?即构造一个查询集,返回field包含在value中的所有行?
最好不使用自定义 SQL(即仅使用 ORM)或不使用后端相关 SQL。
【问题讨论】:
标签: sql django django-models
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]]
虽然这对于庞大的数据集当然不是理想的。
【讨论】: