2010-01-05 85 views
1

有可能是一個明顯的方法來做到這一點,我失蹤了,所以對於noobish問題抱歉。Django - 從ForeignKey中選擇不同的值

我有模型是這樣的:

class Speaker(models.Model): 
    name = models.CharField(max_length=50) 

class Talk(models.Model): 
    title = models.CharField(max_length=50) 
    speaker = models.ForeignKey(Speaker) 

我怎樣才能得到典雅誰已經給了與會所有發言者名單?

目前,我在獲取所有會話的列表以及循環遍歷它們的過程中發生了很多可怕的事情,因爲我看不到使用Django的ORM進行操作的簡單方法。

回答

3
Speaker.objects.exclude(talk=None) 

Speaker.objects.filter(talk__isnull=False) 

編輯

在基礎SQL尋找(通過在表達的末尾添加.query.as_sql()),似乎後者形式是顯著更有效。前者完全不必要的子查詢。

我懷疑這是一個錯誤,因爲第一種形式是在版本1.0之前發生的大量查詢集重構中引入的,並且應該是首選形式。

+0

出於興趣 - 兩者之間有行爲或表現差異嗎? – 2010-01-05 10:18:16

+0

嗯,這是一個驚喜:看到我的編輯。 – 2010-01-05 10:51:20

+0

@丹尼爾 - 看起來像這個已經有一張票(http://code.djangoproject.com/ticket/10790) – 2010-01-05 11:09:33