Django使用不同的字段注释计数

发布于 2021-01-29 19:10:47

我有两个松散定义的模型,如下所示:

class InformationUnit(models.Model):
    username = models.CharField(max_length=255)
    project = models.ForeignKey('Project')
    ...

class Project(models.Model):
    name = models.CharField(max_length=255)

现在,在一个视图中,我想注释属于一个项目的所有InformationUnit,所以我这样做:

p = Project.objects.all().annotate(Count('informationunit')

一切正常,而且,我想知道在每个项目中有多少个不同的“用户名”参与其中。也就是说,计算组成一个项目的InformationUnit中有多少个不同的“用户名”。我已经尝试了以下方法,但是无论用户名如何,它都只计算InformationUnit的数量:

p = Project.objects.all().annotate(Count('informationunit__username')

请注意,用户名不是对象,而是字符串。有没有一种干净的方法可以执行此操作,还是应该基于循环和意大利面条式代码创建更复杂的代码:P

非常感谢!

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Count可以接受一个distinct参数,就像这样:

    p = Project.objects.all().annotate(Count('informationunit__username', 
                                             distinct=True))
    

    似乎没有记录在案,但您可以在Count的源代码中找到它。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看