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实现这一点?