2012-03-23 24 views
1

所以,想象一下有一個模型City它有一個外鍵Country。在數據庫中,有些國家是在一個或多個城市中選擇的,有些則沒有。Django查詢檢索被選爲外鍵的項目?

我們怎樣才能找到那些在一個或多個城市被選中的國家,除了那些根本沒有被選中的國家呢?這裏

from django.db.models import Count 
Country.objects.annotate(city_count=Count('city_set')).filter(city_count__gt=1) 

文檔:

+0

我有這個作爲一個答案,但我不是100%它會工作,我不能在此刻測試。試試:'Country.objects.exclude(city__isnull = True)'。 [你可以在查詢時訪問反向關係](https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships),所以你應該能夠排除這些這與城市沒有落後的關係。如果有效,我會將其作爲回答發佈 – 2012-03-23 22:07:10

+0

不幸的是,'Country'沒有字段'City',這是相反的。雖然'Country'確實有'city_set'屬性;我只需要那些不是空的國家。 – 2012-03-23 22:18:52

+0

您應該能夠在查詢中向後追蹤關係。那麼有+1個城市的國家應該是'(city__isnull = False)'。 – 2012-03-23 22:22:48

回答

1
# Get all countries that have at least one city 
Country.objects.exclude(city__isnull=False)