Python 按外键分组并显示相关项-Django

Python 按外键分组并显示相关项-Django,python,django,django-queryset,Python,Django,Django Queryset,我有以下型号: class Company(CachedModel): name = models.CharField(max_length=255) class UserExtendedProfile(CachedModel): company = models.ForeignKey(Company) user = models.ForeignKey(User) 我基本上需要获得一份公司订购的用户列表,如下所示: Company A User 1

我有以下型号:

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}]
有什么意见吗


谢谢

您可以在
order\u 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'])

有了它,您应该可以使用用户您想要的结构。

如果您只是为了显示目的而尝试实现这一点,请查看:


它可以让你在模板内完成这项工作。

你的示例输出不会聚合或计数。为什么不尝试连接和原始查询呢?我让SQL以原始查询的方式工作,但只是想知道是否有办法通过ORM完成。好的,听起来不错,如果有,我会尝试查找。编写此操作的SQL是什么?但是,这只是表示结果集的另一种方式,我正在寻找类似这样的内容:
{company:[user1,user2,]}
我已经用响应编辑了文章。我不认为django有任何方法可以直接从queryset中完成。然而,我的回复应该有你的答案。尊敬的。。我只需要找出一种方法来获取对象而不是ID,我已经准备好了。。谢谢:)在2021年,有没有办法直接使用ORM实现这一点?