Подсчитайте django используя внешний ключ - PullRequest
2 голосов
/ 10 марта 2020

У меня есть две модели, User и JobGroup, User Model имеет внешний ключ от Job Group.

class User(AbstractUser):
    jobgroup = models.ForeignKey(JobGroup, on_delete=models.CASCADE, null=True, blank=True)
    def __str__(self):
        return self.username

class JobGroup(models.Model):
    group_name = models.CharField(max_length=50, unique=True, blank=True, null=True)
    def __str__(self):
        return self.group_name

Я хочу подсчитать, сколько раз группа заданий назначается пользователю EG user1 - Jobgroup A, user2 - Jobgroup B, user3-Jobgroup A, user4-Jobgroup C Вывод, который я ищу

  • Jobgroup A-2
  • Jobgroup B-1
  • Jobgroup C -1 Я пробовал это jobcount=User.objects.all().values('jobgoup__group_name').annotate(total=Count('jobgroup__group_name')), но это не сработало .. Возвращает None

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Попробуйте это

joblist = list(User.objects.all().values_list('jobgoup__group_name',flat = True).annotate(total = Count('jobgoup__group')))
1 голос
/ 10 марта 2020

Пожалуйста, не , а , используйте .values(..), это полностью уничтожает слой, который определяется моделью. Вы можете просто аннотировать ваши JobGroup объекты числом связанных User s:

from django.db.models import Count

JobGroup.objects.annotate(
    <b>nuser=Count('user')</b>
)

JobGroup объектов, которые возникают из этого набора запросов, будет иметь дополнительный атрибут .nuser, который содержит количество связанных User объектов.

...