【Django】検索結果(QuerySet)を結合する【.union()】
クエリビルダでまとめて検索ができない状況下で、検索処理を複数回に分けて実行し、得られたQuerySetを1つにまとめたいとき。
.union()
もしくは|
が使える。
from django.shortcuts import render,redirect
from django.views import View
from .models import Topic
class IndexView(View):
def get(self, request, *args, **kwargs):
topics = Topic.objects.all()
context = { "topics":topics }
# 重複は自動的に除外される
topics = topics.union( Topic.objects.all() )
print(topics)
first = Topic.objects.filter(id=1)
second = Topic.objects.filter(id=2)
third = Topic.objects.filter(id=3)
# パイプを使用して連結しても良い。
topics = first | second | third
return render(request,"bbs/index.html",context)
def post(self, request, *args, **kwargs):
posted = Topic( comment = request.POST["comment"] )
posted.save()
return redirect("bbs:index")
index = IndexView.as_view()