Django 使用给定的过滤多对多模型的 JSON 字段

Django filter many to many model's JSON field with the given

我有电影和参与者模型,它是这样的,

class Movie(models.Model):
    something something
    participants = models.ManyToManyField(Participant)

class Participant(models.Model):
    something something 
    type = models.CharField(max_length=127, null=True, blank=True)

我想做的是,用给定的列表检查参与者 类型 字段,并根据它列出是否有电影。

例如,我有 type_list=["Adults", "Children", "Senior"],但 Movie 对象有 2 个 Participant 对象,其中一个是 type="Adults",另一个是 type="Children"

在示例中,我不希望显示该电影,因为它没有所有必需的参与者类型。

到目前为止我尝试了什么;

但是,这个returns两个参与者反对

这个也是returns两个参与者对象

我也不会使用 & 运算符。

我剩下的唯一想法是检查参与者的数量。查询返回两个,但我有三个参与者,所以我不能放映这部电影,但这里的问题是列表是来自前端的变量。所以我的查询和 if 语句都应该是通用的,我不知道如何同时做,而且我 %100 确定应该有最佳实践而不是这个。

我将不胜感激每一个微小的帮助,谢谢!

您可以使用 values_list with distinct 获取所有参与者的类型,并通过遍历提供的列表将返回值与提供的 type_list 进行比较:

types_from_db = movie.participants.values_list("type", flat=True).distinct()

for movie_type in ["Adults", "Children", "Senior"]:
     if movie_type not in types_from_db:
         return False
return True