Как использовать (из цепочки импорта 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 способ написать то, что у вас есть.