Ich versuche, die Suche für eine Django-Website, die ich baue, zu erstellen, und in dieser Suche, ich bin in drei verschiedenen Modellen suchen. Und um eine Paginierung der Suchergebnisliste zu erhalten, möchte ich eine generische object_list-Ansicht verwenden, um die Ergebnisse anzuzeigen. Aber um das zu tun, muss ich drei Querysets in eine zusammenführen.
Wie kann ich das tun? Das habe ich schon versucht:
result_list = []
page_list = Page.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term))
article_list = Article.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
post_list = Post.objects.filter(
Q(title__icontains=cleaned_search_term) |
Q(body__icontains=cleaned_search_term) |
Q(tags__icontains=cleaned_search_term))
for x in page_list:
result_list.append(x)
for x in article_list:
result_list.append(x)
for x in post_list:
result_list.append(x)
return object_list(
request,
queryset=result_list,
template_object_name='result',
paginate_by=10,
extra_context={
'search_term': search_term},
template_name="search/result_list.html")
Aber das funktioniert nicht. Ich erhalte einen Fehler, wenn ich versuche, diese Liste in der allgemeinen Ansicht zu verwenden. Der Liste fehlt das Attribut clone.
Wie kann ich die drei Listen zusammenführen? page_list
, article_list
y post_list
?