Как использовать (из цепочки импорта itertools) для поиска в нескольких моделях

я хочу искать поле в нескольких моделях в одном представлении поиска вот что я пробовал я знаю это не чистый и лучший способ сделать вот почему я ищу чистый и лучший способ сделать это я читал это возможно с (from 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})

был бы простой, DRY способ написать то, что у вас есть.

Вернуться на верх