我在通过第三个表与多对多关系的表上进行“排除”查询时遇到问题。我有一个带有项目的表,一个带有人的表和一个带有标志“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 注册的所有人,但对于他注册的项目,状态=红色。有没有办法将第二个条件与第一个条件联系起来?
我的方法是直接过滤Status表,当然这是有效的。但是我确实有一个“状态”对象列表而不是“人物”对象。
答案 0 :(得分:4)
也许这个? (另)
Person.objects.exclude(id__in=Person.objects.filter(project=p, status__is_red=True).values(id))
答案 1 :(得分:0)
如果您有名为“对象”的状态对象列表,则可以使用
[s.person for s in objects]
将其变成相应人员的列表。