Django 在查询集上使用注释和区分

Django 在查询集上使用注释和区分,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,在这里,我试图在过滤掉不同的相关值后,从PunchRawData获取每个位置的计数。 为此,我需要以下代码一起工作 queryset = PunchRawData.objects.filter(punch_type=IN, actual_clock_datetime__date=actual_clock_datetime).distinct('employee') trade_based = queryset.values('employee__position').annotate(emp_c

在这里,我试图在过滤掉不同的相关值后,从
PunchRawData
获取每个位置的计数。 为此,我需要以下代码一起工作

queryset = PunchRawData.objects.filter(punch_type=IN, actual_clock_datetime__date=actual_clock_datetime).distinct('employee')
trade_based = queryset.values('employee__position').annotate(emp_count=Count('employee__position'))

但我得到了这个错误:

NotImplementedError: annotate() + distinct(fields) is not implemented.


如何解决此问题?

先应用annotate,然后使用distinct。另外,只需使用一个查询就可以实现这一点,不需要另一个变量

queryset = PunchRawData.objects.filter(punch_type=IN, actual_clock_datetime__date=actual_clock_datetime).annotate(emp_count=Count('employee__position', distinct=True)).values('emp_count')

希望这对你有用。

这行不通。这是一种特殊情况,需要另一种方法才能工作。目前我正在研究解决这个问题。您可以使用distinct inside count。我已经更新了我的答案。希望它现在能起作用。这也不会起作用。我以前试过使用
distinct=True
。这不会给出预期的结果。是否要统计不同的相关员工,这就是为什么要使用
distinct
?我要统计不同相关员工的每个职位。