我想进行查询以在字段名中搜索所有包含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

07-24 20:00