我有一個問題,在通過第三個表格具有多對多關係的表格上「排除」查詢。我有一個項目,一桌子人,並與這些標記的relationsship表「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註冊,但有狀態大家=紅色他註冊的任何項目。有沒有辦法將第二個條件與第一個條件聯繫起來?
我的方法是直接過濾狀態表,這當然是有效的。但是,我確實有一個「狀態」對象而不是「人」對象的列表。
太棒了!這個想法按需要工作。儘管語法必須稍作修改,因爲values()會給出一個dicts列表(至少在v1.0中)。這給出了確切的結果: Person.objects.exclude(id__in = Person.objects.filter(project = p,status__is_red = True).values_list('id',flat = True)) – Daniel 2009-11-12 22:19:10
啊,是的...你是正確使用values_list。對不起。 :-) – cethegeek 2009-11-12 22:55:50