我有电影和参与者模型,就像这样,
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字段,并根据其列出电影或不列出电影。
例如,我有type_list=["Adults", "Children", "Senior"]
,但电影对象有2个参与者对象,其中一个是type="Adults"
,另一个是type="Children"
在示例中,我希望不显示电影,因为它没有所有必需的参与者类型。
到目前为止我尝试了什么;
movie.participants.filter(type__in=["Adults", "Children", "Senior"])
但是,这将返回两个参与者对象
movie.participants.filter(Q(type="Adults") | Q(type="Children") | Q(type="Senior")):
此对象还返回两个参与者对象。
我也不能使用&运算符。
我留下的唯一想法是检查参与者的人数。查询返回了两个,但是我有三个参与者,所以我不能放这部电影,但是问题出在这里,列表是来自前端的变量。因此,我的查询和if语句都应该是通用的,而且我也不知道怎么做,而且我100%肯定应该有最佳实践,而不是这个。
我将不胜感激,谢谢!
values_list
和distinct
来获取所有参与者的类型,并将返回值与提供的type_list进行比较:movie.participants.values_list("type", flat=True).distinct() == ["Adults", "Children", "Senior"]