如何使用不同数量的过滤条件过滤Django对象

时间:2018-01-18 20:34:13

标签: django

用户可以使用一组术语在我的数据库中搜索文章。例如,"警察身体相机部队"。

然后我想向用户返回一篇文章列表,其中文章的标题或来源包含用户输入的任何一个术语。我不知道该怎么做,特别是因为我不知道用户查询中会有多少单词。

我认为代码会是这样的:

user_query = "police body camera force"
user_query_term_list = user_query.split(' ')

for term in user_query_term_list:
    results = Article.objects.filter(Q(title__icontains="term")|Q(source__icontains="term"))

...然后以某种方式将每个结果组合在一个查询集中。如果这是最有效的方法,我如何将每个循环的结果合并到一个查询集中?如果有更好的方法来实现我的目标,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

查询集被懒惰地评估,所以你可以写一个正常的循环并累积:

results = Article.objects.none()
for term in user_query_term_list:
    results |= Article.objects.filter(title__icontains=term)
    results |= Article.objects.filter(source__icontains=term)
相关问题