2012-10-04 4 views
7

私は次のモデルがあります:グループ - ジャンゴ

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

なぜあなたはjoinとrawクエリーを試してみませんか –

答えて

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']) 

を使用してみてください。テンプレート内だけでそれを行うことができます https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup

:あなたは、単に表示目的のためにこれを実現しようとしている場合

+0

しかし、これは結果セットを表現するのとはちょうど異なる方法です。私は次のようなものを探しています: '{c​​ompany:[user1、user2、]}' – karthikr

+0

私はレスポンスと共に投稿を編集しました。私はdjangoがquerysetからそれを直接行う方法はないと思います。しかし私が投稿した回答はあなたの答えを持っているはずです。 よろしくです – andrefsp

+0

グレート..私はちょうどidsの代わりにオブジェクトを取得する方法を理解する必要があり、私はすべて設定されて..ありがとう:) – karthikr

3

は、見てみましょう。