我想搜索句子中的每个单词,并将其放入result['post']
字典中,当然,这段代码只查找最后一个查询
queries = querystring.split()
for query in queries:
results['posts'] = Post.objects.filter(text__icontains=query)
我尝试了append
,extend
和很多东西,但它没有像预期的那样工作。
**编辑更新:**我也试过
count = {}
results = {}
post_results = []
queries = querystring.split()
for query in queries:
post_results.append(Post.objects.filter(text__icontains=query))
results['posts'] = post_results
count['posts'] = results['posts'].count()
但这会导致另一个错误count() takes exactly one argument (0 given)
Error Image
另外,Post.objects.filter(text__icontains=query)
这一行返回一个queryset值,而Queryset type of django似乎没有append。有没有自己的append like特性?如果是这样的话,那么这不会改变它的查询集类型为列表。使用temp
变量(如post_results = []
)更改为list。
我们能把这个列表改回queryset吗?如果我们能,那就行得通了。
4条答案
按热度按时间zaq34kh61#
我猜原因是
results['posts']
值在每个for循环中都被覆盖了。如何更改代码,如
nkoocmlb2#
我们可以使用Q对象来代替多次查询,下面是一个简单的例子
ezykj2lf3#
不如这样:
更新后,你回答了自己的问题:
哦,我假设你想要一个每个单词的查询列表,以及它们各自的结果计数。如果您只想将搜索词的每个字符串组合成一个OR查询,则可以使用Q对象。
6mzjoqzu4#
谢谢你们所有人,我尝试了最初提到的一切,终于得到了解决方案
我想为
results['posts']
定义一个空的查询集,所以我做了一个不好的但有效的方法results['posts']=Post.objects.filter(text_icontains='sth_that_will_never_b_true')
我用了
Django Merge QuerySets
并解决了这个问题,然后后来研究了真正的方法来定义空QuerySet为
django.db.models.query.QuerySet.none
最后的代码是
现在一切都按预期工作。