「名前」列の下にドラナ、スリラー、サイエンスフィクションなどの値を持つテーブルジャンルがあります。および別のテーブルMovie。Movie テーブルのジャンルは、Genre テーブルの ManyTOManyField です。
シナリオ
movie_1 = {D,S, T}
movie_2 = {S,T}
movie_3 = {D}
movie_4 = {D, T}
D: ドラマ、S: SF、T: スリラー
ケース 1: ユーザーが D と T (チェックボックスのオプション) を選択したとします。
all D movies : movie_1, movie_3, movie_4 ---(a)
all T movies : movie_1, movie_2, movie_4 ---(b)
ユーザーがこれらのオプションを選択すると、次のようにクエリを実行できます。
qs_d = Genre.objects.get(name="Drama")
qs_t = Genre.objects.get(name="Thriller")
m_d = Movies.objects.filter( Q(gen__id=qs_d.id) | Q(gen__id=qs_t.id)).distinct()
for movie_name in m_d:
print movie_name
上記のクエリでは、ジャンル "Drama" と "Thriller" (説明用) をハードコードしました
が、映画のジャンルは {"Drama", "Comedy" , "Thriller"} のようなリストで取得します。ユーザーが選択したオプションの数、その場合、クエリを作成するにはどうすればよいですか?