Django中的简单搜索功能

时间:2017-09-14 08:31:50

标签: python django

我使用Q查找进行简单的搜索功能。这是从视图中获取的代码,

    if query:
    object_list = Post.objects.filter(
        Q(title__icontains=query) |
        Q(content__icontains=query)
        ).distinct()

但我有另一个模型"问题",我想在搜索中过滤问题以及Post。

如何对两个单独的模型使用Q查找,即' Post' &安培; '问题'在一个变量中,即" object_list"。

请帮我这个代码!

1 个答案:

答案 0 :(得分:0)

存储Q对象,为每个模型查询重复使用它,然后链接查询集:

from itertools import chain

q_obj = Q(title__icontains=query) | Q(content__icontains=query)
object_list = chain(Post.objects.filter(q_obj).distinct(), 
                    Question.objects.filter(q_obj).distinct())

这允许您迭代object_list一次。要允许多次迭代,可以将chain返回的迭代器转换为列表:

object_list = list(chain(Post.objects.filter(q_obj).distinct(), 
                         Question.objects.filter(q_obj).distinct()))