引发FieldError(“无法计算%s('%s'):'%s'是聚合值”%(c.name,name,name)

时间:2019-08-13 15:07:47

标签: django django-rest-framework

我需要使用Django的Sum和Func utils通过queryset创建一个组

但是当将所有函数放在注释中时,我会遇到此错误

  

提高FieldError(“无法计算%s('%s'):'%s'是一个聚合值”%(c.name,name,name)   django.core.exceptions.FieldError:无法计算Sum(''):”是聚合

我需要为DRF序列化器获得类似的东西

[
    {
        'quantity': '1520',
        'employee__profile__empcod': 762,
        'operation__baseqty': Decimal('480.0000000000'),
        'duration': 14678.0,
        'standar': '30,57'
    }, {
        'quantity': '150',
        'employee__profile__empcod': 589,
        'operation__baseqty': Decimal('600.0000000000'),
        'duration': 94070.0,
        'standar': '95,68'
    }, {
        'quantity': '150',
        'employee__profile__empcod': 758,
        'operation__baseqty': Decimal('720.0000000000'),
        'duration': 5060.0,
        'standar': '150,68'
    }
],

这是获取所有任务的查询集

tasks = TaskOperation.objects.filter(startdt__gte=start, startdt__lte=end, enddt__isnull=False, operation__baseqty__gt=0).order_by('employee_id')
tasks = tasks.values('employee__profile__empcod', 'employee__profile__firstname')
tasks = tasks.annotate(
    duration=Sum(Cast(Func('startdt', 'enddt', function='datediff', template='%(function)s(ss,%(expressions)s)'), FloatField())),
    standar= Sum(Case(
        When(duration__lte=0, then=0),
        default=Sum((F('quantity') * 100) / (F('duration') / F('operation__baseqty'))),
        output_field=FloatField()
    ))
)

0 个答案:

没有答案