Agrupar por clave externa y mostrar elementos relacionados – Django

Tengo los siguientes modelos:

class Company(CachedModel): name = models.CharField(max_length=255) class UserExtendedProfile(CachedModel): company = models.ForeignKey(Company) user = models.ForeignKey(User) 

Básicamente necesito obtener una lista de usuarios ordenados por compañía como este:

 Company A User 1 User 2 Company B User 3 user 4 

Probé algunas cosas, y lo más cerca que pude llegar es:

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

Sin embargo, esto solo me daría resultados como este:

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

¿Alguna entrada?

Gracias

Puede agregar múltiples argumentos en su método order_by() . Por lo tanto, usted puede hacer pedidos dentro de los pedidos.

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

Para una estructura como:

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

Trate de usar un 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']) 

Con esto deberías poner en los usuarios la estructura que desees.

Si simplemente está tratando de lograr esto con fines de visualización, eche un vistazo a: https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup

Te permite hacer eso dentro de la plantilla.