Ich versuche, die Suche nach einer Django-Site zu erstellen, die ich erstelle, und bei dieser Suche suche ich in 3 verschiedenen Modellen. Und um eine Paginierung in der Suchergebnisliste zu erhalten, möchte ich eine generische Objektlistenansicht verwenden, um die Ergebnisse anzuzeigen. Aber dazu muss ich 3 Abfragesätze zu einem zusammenführen.
Wie kann ich das machen? Ich habe das 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")
Das funktioniert aber nicht. Ich erhalte eine Fehlermeldung, wenn ich versuche, diese Liste in der allgemeinen Ansicht zu verwenden. In der Liste fehlt das Klonattribut.
Weiß jemand, wie ich die drei Listen zusammenführen kann page_list
, article_list
und post_list
?
union
.