我有以下型号:
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 :(得分:10)
您可以在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'])
有了这个,你应该让用户得到你想要的结构。
答案 1 :(得分:4)
如果您只是为了显示目的而尝试完成此操作,请查看: https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup
它可以让你在模板中做到这一点。