我想进行查询以在字段名中搜索所有包含snames
var中某个单词的行的表民族:
snames='john bush george robert'
我用以下代码在SQL上执行此操作:
SELECT * FROM names.peoples
WHERE `name` LIKE'%john%bush%george%robert%';
在django中:
snames='john bush george robert'
p = peoples.objects.all().filter(name__icontains=snames)
有可能在单个查询中吗?
最佳答案
您需要在列表中添加名称,然后使用Q可以OR
过滤name
字段的值:
sname = ['john', 'bush', 'george', 'robert']
condition = reduce(operator.or_, [Q(name__icontains=name) for name in sname])
p = Peoples.objects.filter(condition).distinct()
可能您不清楚条件行,因此下面是条件的示例输出:
Q(name__icontains='john') OR Q(name__icontains='bush') OR Q(name__icontains='george') OR Q(name__icontains='rober')
请注意,当您要查询模型的名称为大写时。您在代码中使用
poeples.objects.filter
希望它是hypo,正确的是Poeples.objects.filter
。