【发布时间】:2018-10-10 05:20:35
【问题描述】:
我无法找到使用元素在多对多关系中使用次数的计数来注释查询集的方法。
class Profile(models.Model):
[...]
# Profile can have multiple roles
roles = models.ManyToManyField('Role', blank=True)
[...]
class Role(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
name = models.CharField(blank=True, max_length=30)
description = models.CharField(blank=True, max_length=300)
[...]
例如,我将有 5 个角色:
- 角色1
- 角色2
- 角色3
- 角色4
- 角色5
还有 2 个配置文件分配了以下角色:
- 简介1
- 角色 1
- 角色 2
- 个人资料2
- 角色 1
- 角色 3
- 角色 4
我想查询角色模型并使用具有该角色的配置文件数量进行注释。
所以返回一个类似的查询集
Role1: company, name, description, profile_count=2
Role2: company, name, description, profile_count=1
等等……
我试过了,但还是不行:
Role.objects.annotate(profile_count=Count('profile__roles'))
它似乎返回一个总体计数,而不是每个角色的计数。
知道这是否可以在 Django 中本地完成,或者是否需要原始 SQL 请求?
谢谢!
【问题讨论】:
标签: django django-models django-annotate