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