otkken2のプログラミング備忘録

学習の備忘録。自分向け

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()を追記


あじゃす