Estou tentando criar a pesquisa para um site do Django que estou construindo e nessa pesquisa estou pesquisando em 3 modelos diferentes. E para obter a paginação na lista de resultados da pesquisa, eu gostaria de usar uma visualização genérica de object_list para exibir os resultados. Mas para fazer isso, eu tenho que mesclar 3 conjuntos de consultas em um.
Como eu posso fazer isso? Eu tentei isso:
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")
Mas isso não funciona. Eu recebo um erro quando tento usar essa lista na exibição genérica. A lista está ausente do atributo clone.
Alguém sabe como eu posso mesclar as três listas page_list
, article_list
e post_list
?
union
.