我在通过第三个表对具有多对多关系的表进行“排除”查询时遇到问题。我有一个包含项目的表、一个包含人员的表和一个带有标志“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 中注册但在他注册的任何 项目中状态=red 的所有人。有没有办法将第二个条件与第一个条件联系起来?
我的方法是直接在 Status 表上进行过滤,这当然有效。但是我确实有一个“状态”对象列表而不是“人”对象。
最佳答案
也许是这个? (未经测试)
Person.objects.exclude(id__in=Person.objects.filter(project=p, status__is_red=True).values(id))
关于python - 通过第三个表排除多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724317/