用户可以使用一组术语在我的数据库中搜索文章。例如,"警察身体相机部队"。
然后我想向用户返回一篇文章列表,其中文章的标题或来源包含用户输入的任何一个术语。我不知道该怎么做,特别是因为我不知道用户查询中会有多少单词。
我认为代码会是这样的:
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"))
...然后以某种方式将每个结果组合在一个查询集中。如果这是最有效的方法,我如何将每个循环的结果合并到一个查询集中?如果有更好的方法来实现我的目标,我将不胜感激。谢谢。
答案 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)