Django - 在 ManytoMany 关系中使用计数进行注释

Django - Annotate with count across ManytoMany relationships

我找不到通过计算元素在多对多关系中使用的次数来注释查询集的方法。

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 个角色:

并且 2 个配置文件分配了以下角色:

我想查询角色模型并用具有该角色的配置文件的数量进行注释。

所以return一个像

这样的查询集
Role1: company, name, description, profile_count=2
Role2: company, name, description, profile_count=1

等...

我已经试过了,但是没有用:

Role.objects.annotate(profile_count=Count('profile__roles'))

这似乎是 return 总计数而不是每个角色的计数。

知道这是否可以在 Django 中本地完成,或者是否需要原始 SQL 请求?

谢谢!

如果我理解正确的话,你只是想要这个:

Role.objects.annotate(profile_count=Count('profile'))

你写的差不多了。