按外键组合显示相关项目 - Django [英] Group by Foreign Key and show related items - Django

查看:127
本文介绍了按外键组合显示相关项目 - Django的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下模型:

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

class UserExtendedProfile(CachedModel):

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

我基本上需要获得公司订购的用户列表:

I basically need to get a list of users ordered by company like this:

Company A
    User 1
    User 2

Company B
    User 3 
    user 4

我尝试过几件事,最接近的是:

I tried a few things, and the closest I could get to is:

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

然而,这只会给我这样的结果:

However this would just give me results something like this:

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

任何输入

感谢

推荐答案

您可以在 order_by()方法。因此,您可以在订单中订购。

You can add multiple arguments on your order_by() method. Therefore you can do ordering inside orderings.

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

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

With this you should get on users the structure you want.

这篇关于按外键组合显示相关项目 - Django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆