我有一个表类型,在“名称”列下具有 Drana、Thriller、Sci-fi 等值。和另一张表Movie。在电影表流派中,流派表是 ManyTOManyField
设想
movie_1 = {D,S, T}
movie_2 = {S,T}
movie_3 = {D}
movie_4 = {D, T}
D:戏剧,S:科幻,T:惊悚
案例 1:假设用户选择了 D 和 T(它们是复选框选项)
all D movies : movie_1, movie_3, movie_4 ---(a)
all T movies : movie_1, movie_2, movie_4 ---(b)
当用户选择这些选项时:我想显示movie_1,movie_2,movie_3,movie_4,这是(a)和(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", "Comedy" , "Thriller"} 等列表中获得电影类型,具体取决于用户选择的选项数量,在这种情况下我该如何构建查询?