Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django用不同的字段注释计数_Python_Django - Fatal编程技术网

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非常感谢!它被记录下来了(不管怎样,现在):谢谢你,这就是我一直在寻找的。接受的答案返回一个对象列表。你的解决方案对我有效,太好了。这完全成功了。