Django エラー備忘録:複数のManyToManyFieldを持った検索フォームの実装でOR検索をしたら同じ記事が何十個も重複表示された件
バンドメンバー募集サイトを作成中です。メン募記事の検索機能を作ろうとしています。
活動エリア(都道府県)[active_area]、投稿者のパート[mypart]、募集するパート[recruite_part]、ジャンル[genre]という4つのManyToManyフィールドを記事は持っており、それらいづれかを含む記事を抽出して表示したい、という状況です。
views.py
from django.db.models import Q from .forms import * def search(request): if request.method == "POST": form = PostContentForm(request.POST) #各ManyToManyフィールドの選択結果をリスト形式で取得 m2m_search_active_area = request.POST.getlist('active_area') m2m_search_mypart = request.POST.getlist('mypart') m2m_search_recruite_part = request.POST.getlist('recruite_part') m2m_search_genre = request.POST.getlist('genre') #以下のOR検索だと同じ記事が何回も重複して表示されてしまう。 postcontents = PostContent.objects.filter(Q(active_area__in = m2m_search_active_area) | Q(mypart__in = m2m_search_mypart) \ |Q(recruite_part__in = m2m_search_recruite_part) |Q(genre__in = m2m_search_genre))
これやったら解決した
postcontents = PostContent.objects.filter(Q(active_area__in = m2m_search_active_area) | Q(mypart__in = m2m_search_mypart) \ |Q(recruite_part__in = m2m_search_recruite_part) |Q(genre__in = m2m_search_genre)).distinct() #←末尾にdistinct()を追記
あじゃす