Django - Аннотировать со счетом через отношения ManytoMany - PullRequest
0 голосов
/ 10 октября 2018

Я не могу найти способ аннотировать набор запросов со счетчиком того, сколько раз элемент используется в отношении «многие ко многим».

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Роли:

  • Role1
  • Role2
  • Role3
  • Role4
  • Role5

И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?

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

Если я вас правильно понимаю, вы просто хотите это:

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

Это почти то, что вы написали.

...