私は構築しているDjangoサイトの検索を構築しようとしています。その検索では、3つの異なるモデルで検索しています。そして、検索結果リストのページネーションを取得するために、汎用のobject_listビューを使用して結果を表示したいと思います。しかし、そのためには、3つのクエリセットを1つにマージする必要があります。
どうやってやるの?私はこれを試しました:
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")
しかし、これは機能しません。汎用ビューでそのリストを使用しようとすると、エラーが発生します。リストにはクローン属性がありません。
誰が、私は3つのリストをマージする方法を知っていますpage_list
、article_list
とpost_list
?
union
。