2016-08-09 101 views
0

在Django中,我有兩個型號:Django的:篩選一個QuerySet和選擇的結果外鍵

class A(models.Model): 
    # lots of fields 

class B(models.Model): 
    a = models.ForeignKey(A) 
    member = models.BooleanField() 

我需要構建濾鏡B,選擇所有A的查詢,像這樣:

result = B.objects.filter(member=True).a 

以上示例代碼當然將返回一個錯誤QuerySet has no attribute 'a'

預期結果: 含有一個QuerySet僅A對象

什麼是實現所需功能的最佳和最快的方式?

+0

不知道你在期待什麼。 'filter()'返回一個查詢集,而不是一個實例,所以它不會有'a'屬性;查詢集中的元素具有該屬性。 –

回答

4

我假定你正在尋找的東西像

result = A.objects.filter(b__member=True) 
1

安德烈扎魯賓的回答另一種方法是遍歷你有查詢集,並創建一個對象的列表。

b_objects = B.objects.filter(member=True) 
a_objects = [result.a for result in b_objects] 
0

下面的代碼不會過濾一切,但它會過濾所有的值相對於外地,可能是你正在尋找相同

B.objects.filter(成員= TRUE).filter(a__somefield ='一些值')