2013-04-05 36 views
2

我有這樣的設置:如何獲得django中所有相關對象的獨特集合?

class ModelA: 
    name = models.TextField('Name') 

class ModelB: 
    name = models.TextField('Name') 
    a = models.ForeignKey(ModelA) 

我想這樣做的是讓所有不同MODELA的是ModelB的有一個列表。例如我的數據庫是這樣的:

a1 = ModelA(name='a1') 
a2 = ModelA(name='a2') 
a2 = ModelA(name='a3') 
b1 = ModelB(name='b1', a=a1) 
b2 = ModelB(name='b2', a=a1) 
b2 = ModelB(name='b2', a=a3) 

然後我想查詢的結果是[a1,a3]。

在一個地方,我想要的只是列表的數量,實際上,但我認爲如果我能得到列表中的數字並不重要。

回答

3

可以使用的reverse lookupsand distinct

ModelA.objects.filter(modelb__isnull=False).distinct("name") 

組合可以以指定DISTINCT應適用於哪些字段的名稱傳遞位置參數(*字段)。這轉換爲SELECT DISTINCT ON SQL查詢。這是區別。對於正常的distinct()調用,數據庫在確定哪些行是不同的時候會比較每行中的每個字段。對於具有指定字段名稱的distinct()調用,數據庫將僅比較指定的字段名稱。

+1

這隻有在PostgreSQL後端正在使用時纔有效。 – Ngenator 2013-04-05 19:21:49

+0

我正在使用postgre,因爲它發生。買爲什麼? – 2013-04-05 19:28:29

+0

這只是一個在其他後端不可用的功能。 – Ngenator 2013-04-05 19:38:56

相關問題