我如何根据ID计算n的总和?

时间:2019-07-11 15:37:20

标签: django python-3.x group-by django-queryset

我有一个这样的QuerySet。我想要基于“ id”的“ n”之和。

这是我的查询集:

<QuerySet [{'id': 1, 'n': 0}, {'id': 2, 'n': 0}, {'id': 2, 'n': 1}, {'id': 3, 'n': 2}, {'id': 4, 'n': 0}, {'id': 5, 'n': 1}, {'id': 5, 'n': 0}]>

这是我的代码:

drivers = Driver.objects.values('id').annotate(
        travel_time=Sum(Case(
            When(car__ride__pickup_time__isnull=False,
                 then=(F('car__ride__dropoff_time') - F('car__ride__pickup_time'))),
            default=0
        )),
    ).annotate(
        n=Case(
            When(Q(travel_time__gt=t) & Q(car__model__gte=n), then=Count('car__ride')),
            output_field=IntegerField(),
            default=0
        )
    ).values('id', 'n')

我不知道如何根据id来分组:(

1 个答案:

答案 0 :(得分:0)

您可以使用values在django中进行分组

在查询集中,您将其按.values('id', 'n').values('id')分组

删除.values('id', 'n'),它应该可以工作。

drivers = Driver.objects.values('id').annotate(
        travel_time=Sum(Case(
            When(car__ride__pickup_time__isnull=False,
                 then=(F('car__ride__dropoff_time') - F('car__ride__pickup_time'))),
            default=0
        )),
    ).annotate(
        n=Case(
            When(Q(travel_time__gt=t) & Q(car__model__gte=n), then=Count('car__ride')),
            output_field=IntegerField(),
            default=0
        )
    ).values_list('id', 'n')

它应该可以工作