如何使用(来自 itertools 导入链)搜索多个模型

how to use (from itertools import chain) to search multiple model

我想在单个搜索视图中搜索多个模型的字段这是我尝试过的我知道这不是一个干净和更好的方法,这就是为什么我正在寻找一个干净和更好的方法来做到这一点我读到它是可能的(来自 itertools import chain)但我不完全理解如何在我的基于函数的视图中使用它而不传递这么多上下文这里是我的观点

def search_item(request):
    search_item = request.GET.get('search')
    if search_item:
        story = Story.objects.filter(Q(title__icontains=search_item)|Q(written_by__icontains=search_item))
        news = News.objects.filter(Q(title__icontains=search_item)|Q(written_by__icontains=search_item))
        Stock = stock.objects.filter(Q(title__icontains=search_item)|Q(written_by__icontains=search_item))
    return render(request, 'search_result.html', {'ttts':ttt,'story':story,'news':news,'stock':Stock,})

谢谢

你不需要itertools.chain

def search_item(request):
    results = []
    search_item = request.GET.get("search")

    if search_item:
        q = Q(title__icontains=search_item) | Q(written_by__icontains=search_item)
        for model in (Story, News, Stock):
            results.extend(model.objects.filter(q))

    return render(request, "search_result.html", {"results": results})

将是一种简单、干燥的方式来编写您所拥有的内容。