一尘不染

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

django

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

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

非常感谢!


阅读 339

收藏
2020-04-01

共1个答案

一尘不染

Count可以distinct这样说:

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

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

2020-04-01