Python Django用不同的字段注释计数
我有两个松散定义的模型,如下所示:Python Django用不同的字段注释计数,python,django,Python,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) 现在,在视图中,我想注释属于项目的所有In
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
s,所以我这样做:
p = Project.objects.all().annotate(Count('informationunit')
这样就行了
此外,我想知道,在每个项目中,有多少不同的username
s参与。
也就是说,计算组成一个项目的InformationUnit
s中有多少不同的username
s。
我尝试了以下方法,但它只是计算InformationUnit
的数量,而不管用户名是什么:
p = Project.objects.all().annotate(Count('informationunit__username')
请注意,username
不是一个对象,而是一个字符串。有没有一种干净的方法可以做到这一点,或者我应该基于循环和意大利面代码创建一个更复杂的代码:P
非常感谢 Count
可以接受一个distinct
参数,如下所示:
Project.objects.all().annotate(Count('informationunit__username',
distinct=True))
p = Project.objects.all().annotate(Count('informationunit__username',
distinct=True))
这似乎没有文档记录,但您可以在源代码中找到它进行计数。如果您只想计算不同的值,可以使用distinct()和Count()函数:
count = Project.objects.values('informationunit__username').distinct().count()
SQL选择field1,按field1顺序按NULL从项目组中计数(不同(主键))代码>
QuerySet
Project.objects.all().values(field1).annotate(count=Count('pk', distinct=True)).order_by()
成功了!我在某个地方找到了这个,甚至试过(实际上这是我在这里提问之前做的最后一件事)。起初它不起作用,但今天重新启动开发服务器后再次尝试,结果成功了:P非常感谢!它被记录下来了(不管怎样,现在):谢谢你,这就是我一直在寻找的。接受的答案返回一个对象列表。你的解决方案对我有效,太好了。这完全成功了。