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

问题描述 投票:0回答:1

我有电影和参与者模型,就像这样,

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%肯定应该有最佳实践,而不是这个。

我将不胜感激,谢谢!

python django django-models django-views django-queryset
1个回答
0
投票
您可以使用values_listdistinct来获取所有参与者的类型,并将返回值与提供的type_list进行比较:

movie.participants.values_list("type", flat=True).distinct() == ["Adults", "Children", "Senior"]

© www.soinside.com 2019 - 2024. All rights reserved.