832 Stimmen

Wie kann ich zwei oder mehr Querysets in einer Django-Ansicht kombinieren?

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 ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X