按外键分组并显示相关条目- Django

8fsztsew  于 2023-02-20  发布在  Go
关注(0)|答案(2)|浏览(98)

我有以下型号:

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}]

有线索吗?
谢谢

x3naxklr

x3naxklr1#

你可以在order_by()方法上添加多个参数,因此你可以在排序中进行排序。

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

对于如下结构:

[{ company: [user1, user2, ] }, ]

尝试使用默认规则

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

这样,您就可以在users上获得您想要的结构。

qoefvg9y

qoefvg9y2#

如果您只是为了显示而尝试完成此操作,请查看:https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#regroup
它允许您在模板中执行此操作。

相关问题