我有一個模型Foo,它具有用戶模型的ForeignKey。獲取外鍵而無需請求整個對象
後來,我需要抓住所有的用戶的ID,並把然後在列表上
foos = Foo.objects.filter(...)
l = [ f.user.id for f in foos ]
但是,當我這樣做,Django的抓住從DB整體用戶實例,而不是給我的只是數字用戶id,它存在於每個Foo行中。
如何在不查詢每個用戶或使用select_related的情況下獲取所有ID?
感謝
我有一個模型Foo,它具有用戶模型的ForeignKey。獲取外鍵而無需請求整個對象
後來,我需要抓住所有的用戶的ID,並把然後在列表上
foos = Foo.objects.filter(...)
l = [ f.user.id for f in foos ]
但是,當我這樣做,Django的抓住從DB整體用戶實例,而不是給我的只是數字用戶id,它存在於每個Foo行中。
如何在不查詢每個用戶或使用select_related的情況下獲取所有ID?
感謝
使用queryset's values() function,這將返回
>>> Foo.objects.all().values('user__id')
[{'user__id': 1}, {'user__id' 2}, {'user__id': 3}]
的ORM然後將能夠在SQL查詢優化以僅返回所需的字段,而不是:包含名稱/值對作爲參數傳遞的每個屬性的字典列表做一個「SELECT *」。
沒關係......我不確定爲什麼當我試圖在此之前didn't的工作,但是這是如何做到:
l = [ f.user_id for f in foos ]
無論何時在Django中定義一個ForeignKey,它都會自動爲您的模型添加FIELD_id字段。
例如,如果Foo
有FK到User
名爲「user
」,屬性,那麼你也有一個名爲屬性user_id說明其中包含了相關用戶的ID。
l = [ f.user_id for f in foos ]
調用.values()
還增加了性能,如果您選擇的屬性明智
丹尼爾你好, 你的回答將幫助我的未來。謝謝! – Tiago 2009-01-25 14:55:26