簡體   English   中英

通過第三個表排除多對多關系

[英]Exclude on a many-to-many relationship through a third table

我有一個問題是在通過第三個表具有多對多關系的表上進行“排除”查詢。 我有一個帶有項目的表,一個帶有人的表和一個帶有標志“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表,當然這是有效的。 但后來我確實有一個“狀態”對象列表而不是“人物”對象。

也許這個? (另)

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

如果您有一個名為“對象”的Status對象列表,則可以使用

[s.person for s in objects]

使其成為相應人員的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM