我有两个松散定义的模型,如下所示:
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
非常感谢!
Count可以distinct这样说:
Count
distinct
p = Project.objects.all().annotate(Count('informationunit__username', distinct=True))
似乎没有记录在案,但你可以在Count的源代码中找到它。