编程语言
首页 > 编程语言> > python-通过第三张表排除多对多关系

python-通过第三张表排除多对多关系

作者:互联网

我对通过第三个表具有多对多关系的表进行“排除”查询时遇到问题.我有一个带有项目的表,一个带有人的表和一个带有“ is_green,is_yellow,is_red”标志的关系表,例如:

class Project(models.Model):
    ...

class Person(models.Model):
    projects = models.ManyToManyField(Project, through='Status')

class Status(models.Model):
    person = models.ForeignKey(Person)
    project = models.ForeignKey(Project)
    is_green = models.BooleanField()
    ...

现在,我要进行查询以返回所有人员,但不包括在特定项目中确实带有“ is_red”标志的人员.但是以下

Person.objects.exclude(project=p, status__is_red=True)

排除在项目p中注册但其注册的任何项目的状态为红色的所有人.有没有办法将第二个条件与第一个条件联系起来?

我的方法是直接过滤“状态”表,这当然可以工作.但是,我确实有一个“状态”对象列表,而不是“人”对象列表.

解决方法:

也许这个吗? (未试)

Person.objects.exclude(id__in=Person.objects.filter(project=p, status__is_red=True).values(id))

标签:many-to-many,python,django
来源: https://codeday.me/bug/20191107/2002378.html