2014-03-05 40 views
1

我需要的東西像這樣在Django的一個查詢中選擇用戶和組。如何在django的單個查詢中選擇用戶和組?

user = User.objects.select_related('groups').get(id=user_id) 

我不想爲此使用原始查詢。

還有另一種方式來做到這一點,這使得兩個查詢:

user = User.objects.get(id=user_id) 
groups = user.groups 
+1

有什麼問題你的第一個例子嗎?你只需要'user.groups.all()' – karthikr

+3

你看着'prefetch_related'?它應該是在一個查詢 – dm03514

回答

1

編輯:這似乎是沒有辦法做到這一點,除了原始的SQL或extra一個查詢。

所以,如果你只想get一個用戶,你的第二個例子應該工作。 如果許多用戶:


你應該使用prefetch-related,但在兩個查詢。

prefetch_related,在另一方面,不爲每個關係的單獨的查找,並且確實在Python「接合」。這使得它可以預取許多一對多和多對一的一個對象,它不能做使用select_related,除了外鍵和select_related所支持的一個一對一的關係。它還支持GenericRelation和GenericForeignKey的預取。

...

在prefetch_related附加查詢()的查詢集之後執行已開始進行評估,並在主查詢已被執行。

所以,如果你想預取groups,將您是否使用allget執行兩個查詢。

+0

它可能正在執行兩個查詢拉多對多的關係,但它不是運行兩行的任擇議定書第一次嘗試慢? – Bobort

+0

@Bobort他們應該是一樣的,他們基本上做同樣的事情。 – JimmyYe

相關問題