kar*_*ikr 13 python django django-queryset
我有以下型号:
class Company(CachedModel):
name = models.CharField(max_length=255)
class UserExtendedProfile(CachedModel):
company = models.ForeignKey(Company)
user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
我基本上需要获得公司订购的用户列表,如下所示:
Company A
User 1
User 2
Company B
User 3
user 4
Run Code Online (Sandbox Code Playgroud)
我尝试了一些东西,最接近的是:
users = UserExtendedProfile.objects.values('company', 'user').order_by('company')
Run Code Online (Sandbox Code Playgroud)
然而,这只会给我这样的结果:
[{'company': 1L, 'user': 17L}, {'company': 1L, 'user': 6L}, {'company': 2L, 'user': 15L}]
Run Code Online (Sandbox Code Playgroud)
有什么投入?
谢谢
and*_*fsp 12
您可以在order_by()方法上添加多个参数.因此,您可以在订单内订购.
users = UserExtendedProfile.objects.values('company', 'user').order_by('company', 'user')
Run Code Online (Sandbox Code Playgroud)
对于像这样的结构:
[{ company: [user1, user2, ] }, ]
Run Code Online (Sandbox Code Playgroud)
尝试使用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'])
Run Code Online (Sandbox Code Playgroud)
有了这个,你应该让用户得到你想要的结构.
如果您只是出于显示目的而尝试完成此操作,请查看:https : //docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup
它使您可以在模板内执行此操作。