2012-10-04 3 views
7

Aşağıdaki modeller vardır:Grup Dış Key ve gösteri ilgili öğeler tarafından - Django

Company A 
    User 1 
    User 2 

Company B 
    User 3 
    user 4 

Denedim:

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

class UserExtendedProfile(CachedModel): 

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

Temelde böyle şirket tarafından sipariş edilen kullanıcıların bir listesini almak gerekir bir kaç şey ve ben alabilir yakın:

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

Ancak bu sadece bana verecekti böyle bir şey ortaya çıkarır:

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

Herhangi bir girdi var mı?

Teşekkür

+0

Örnek çıktınız toplanmaz veya sayılmaz. –

+0

oops .. Üzgünüm .. metni güncellemeniz gerekiyor. – karthikr

+0

neden katıl ve ham sorgu –

cevap

7

Sen order_by() yöntemine birden fazla argüman ekleyebilir. Bu nedenle siparişlerin içinde sipariş verebilirsiniz. Böyle bir yapıda için

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

:

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

Eğer kullanıcıları istediğiniz yapısı üzerinde almalısınız Bununla bir 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']) 

kullanmayı deneyin. Eğer şablonu içinde sadece bunu yapmak O sağlayan https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup

: basitçe görüntüleme amacıyla bunu gerçekleştirmek çalışıyorsanız

+0

, ancak bu sonuç kümesini temsil etmenin yalnızca farklı bir yoludur, şöyle bir şey arıyorum: '{şirket: [kullanıcı1, kullanıcı2,]}' – karthikr

+0

Yanıtla birlikte gönderiyi düzenledim. Ben django'nun doğrudan sorgudan yapmanın bir yolu olduğunu sanmıyorum. Ancak gönderdiğim yanıt cevabınızı almalı. Saygılarımızla – andrefsp

+0

Harika .. Sadece kimlikleri yerine nesneleri almak için bir yol bulmaya ihtiyacım var, ve ben tüm set .. Teşekkürler :) – karthikr

3

, bir göz atın.