J'essaie de construire la recherche d'un site Django que je suis en train de construire, et dans cette recherche, je cherche dans 3 modèles différents. Et pour obtenir la pagination sur la liste des résultats de recherche, je voudrais utiliser une vue générique object_list pour afficher les résultats. Mais pour ce faire, je dois fusionner 3 ensembles de requêtes en un seul.
Comment puis je faire ça? J'ai essayé ça:
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")
Mais ça ne marche pas. J'obtiens une erreur lorsque j'essaie d'utiliser cette liste dans la vue générique. La liste ne contient pas l'attribut clone.
Est-ce que quelqu'un sait comment je peux fusionner les trois listes page_list
, article_list
et post_list
?
union
.