Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django-聚合条件子字段_Django_Group By_Aggregate - Fatal编程技术网

Django-聚合条件子字段

Django-聚合条件子字段,django,group-by,aggregate,Django,Group By,Aggregate,假设我有以下模型。给定的作业可以运行多天,上面有多个用户,这些用户可以设置各种标志(模型中的布尔值): 我想做的是提取作业ID、名称、日期和所有子项的计数的列表,每个作业日期上具有is_mgr==True、is_sup==True和timecard_complete==False的子项。因此,结果将类似于: Job ID | Job Name | Date | all_users | mgr | sup | missing_

假设我有以下模型。给定的
作业
可以运行多天,上面有多个用户,这些用户可以设置各种标志(模型中的布尔值):

我想做的是提取作业ID、名称、日期和所有子项的计数的列表,每个作业日期上具有
is_mgr==True
is_sup==True
timecard_complete==False
的子项。因此,结果将类似于:

        Job ID                       | Job Name |    Date    | all_users | mgr | sup | missing_tc
--------------------------------------------------------------------------------------
978294d8-3ae8-11ea-b77f-2e728ce88125 |    Job 1 | 2020-01-05 |         8 |   2 |   0 |          4
978294d8-3ae8-11ea-b77f-2e728ce88125 |    Job 1 | 2020-01-06 |         6 |   0 |   1 |          3
f5e87902-3ae8-11ea-b77f-2e728ce88125 |    Job 2 | 2020-01-05 |        10 |   1 |   3 |          7
f5e87902-3ae8-11ea-b77f-2e728ce88125 |    Job 2 | 2020-01-06 |         5 |   0 |   1 |          0
如何使用django查询实现这一点

编辑:编辑以引入职务名称,因为我意识到我可以只对JobEmployee表进行常规聚合查询,但我也需要来自职务对象的数据。

试试这个

from django.db.models import Count, Q

(Job.objects.values('id', 'name', 'jobemployee__date')
.annotate(all_users=Count('jobemployee'))
.annotate(mgr=Count('jobemployee__is_mgr', filter=Q(jobemployee__is_mgr=True)))
.annotate(sup=Count('jobemployee__is_sup', filter=Q(jobemployee__is_sup=True)))
.annotate(missing_tc=Count('jobemployee__timecard_complete', filter=Q(jobemployee__timecard_complete=False))))
如果没有您的结构,就无法测试它,请告诉我是否用
或类似的东西打印错误。

我缺少
过滤器=Q()
。我在文档中遗漏了那个参数。谢谢
from django.db.models import Count, Q

(Job.objects.values('id', 'name', 'jobemployee__date')
.annotate(all_users=Count('jobemployee'))
.annotate(mgr=Count('jobemployee__is_mgr', filter=Q(jobemployee__is_mgr=True)))
.annotate(sup=Count('jobemployee__is_sup', filter=Q(jobemployee__is_sup=True)))
.annotate(missing_tc=Count('jobemployee__timecard_complete', filter=Q(jobemployee__timecard_complete=False))))