17

我有以下型号:

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}]

有什么输入吗?

谢谢

4

2 回答 2

17

您可以在order_by()方法上添加多个参数。因此,您可以在订单中进行订购。

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

对于像这样的结构:

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

尝试使用默认字典

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

有了这个,你应该让用户得到你想要的结构。

于 2012-10-04T17:15:15.100 回答
7

如果您只是为了显示目的而尝试完成此操作,请查看: https ://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup

它使您可以在模板中执行此操作。

于 2015-04-06T17:59:05.127 回答