django - 使用外键在 Django 中计数

标签 django django-models django-views

我有两个模型,用户和工作组,用户模型有一个来自工作组的外键。

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

我想统计作业组分配给用户的次数 E.G 用户 1 - 作业组 A、用户 2 - 作业组 B、用户 3-作业组 A、用户 4-作业组 C
我正在寻找的输出
  • 工作组 A-2
  • 工作组 B-1
  • 工作组 C-1
    我试过这个jobcount=User.objects.all().values('jobgoup__group_name').annotate(total=Count('jobgroup__group_name'))但它没有用。它返回 None
  • 最佳答案

    请不要使用.values(..) ,它完全破坏了模型定义的层。您可以简单地注释您的 JobGroup对象按相关数量User s:

    from django.db.models import Count
    
    JobGroup.objects.annotate(
        nuser=Count('user')
    )
    JobGroup从此查询集产生的对象将有一个额外的属性 .nuser包含相关数量User对象。

    关于django - 使用外键在 Django 中计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60622526/

    相关文章:

    python - Django:相关模型中外键总计值的正确方法

    django - ** 之后的 _filter_or_exclude() 参数必须是映射,而不是 ReverseManyRelatedObjectsDescriptor

    Django : login() within Sign In form clean() or in the view ?

    django - 如何在 Django 模型字段中使用 SearchRank?

    python - 如何使通过多对多关系连接的模型在 Django 管理中同时在两个地方可编辑?

    django - Django无法连接到gitlab ci中的postgres数据库

    python - 用于管理 Django 模型的 GUI 设计器

    python - 实时动态更新 django 模板

    django,查询不同模型的好方法

    Django 1.4(MEDIA_ROOT,STATIC_ROOT,TEMPLATE_DIRS)