2012-10-04 47 views
7

我有以下型號:集團外鍵和表演項目 - Django的

class Company(CachedModel): 
    name = models.CharField(max_length=255) 

class UserExtendedProfile(CachedModel): 

    company = models.ForeignKey(Company) 
    user = models.ForeignKey(User) 

基本上,我需要獲得由公司這樣的命令的用戶的列表:

Company A 
    User 1 
    User 2 

Company B 
    User 3 
    user 4 

我試着一些事情,最接近我可以得到的是:

users = UserExtendedProfile.objects.values('company', 'user').order_by('company') 

但是,這隻會給我這樣的結果:

[{'company': 1L, 'user': 17L}, {'company': 1L, 'user': 6L}, {'company': 2L, 'user': 15L}] 

任何輸入?

感謝

+0

您的示例輸出不會聚合或計數。 –

+0

哎呀..對不起..需要更新文本。 – karthikr

+0

爲什麼你不試試加入和原始查詢 –

回答

7

您可以在order_by()方法添加多個參數。因此,您可以在訂單內訂購。

users = UserExtendedProfile.objects.values('company', 'user').order_by('company', 'user') 

對於這樣的結構:

[{ company: [user1, user2, ] }, ] 

嘗試使用defaultdict

from collections import defaultdict 
users = defaultdict(list) 
for result in UserExtendedProfile.objects.values('company', 'user').order_by('company', 'user'): 
    users[result['company']].append(result['user']) 

有了這個,你應該得到用戶你想要的結構。

+0

但是,這只是表示結果集的一種不同方式,我正在尋找類似於:{{company:[user1,user2,]}' – karthikr

+0

我已使用響應編輯了帖子。我不認爲django有任何方法直接從查詢集中執行。然而,我發佈的回覆應該有你的答案。 Regards – andrefsp

+0

好..我只需要找出一種方法來獲取對象,而不是ID,並且我都設置了。謝謝:) – karthikr