gpt4 book ai didi

python - Django 用空值注释字段

转载 作者:行者123 更新时间:2023-12-02 18:13:54 26 4
gpt4 key购买 nike

我有 Demand 对象的列表,这些对象具有 allocated 字段,该字段可以是 null 或具有名称(表示此需求的分配)。

我使用注释来计算每个团队分配/未分配的人数:

Demand.objects.filter(project=project).values('team').annotate(
unallocated=Count('allocated', filter=Q(allocated__isnull=True)),
allocated=Count('allocated', filter=Q(allocated__isnull=False))
)

奇怪的是,allocated 注释的数字是正确的,但 unallocated 的数字始终为零。

例如:

list(Demand.objects.filter(project=project).values('allocated', 'team'))

结果如下:

[{'allocated': None, 'team': 'Design'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Engineering'},
{'allocated': None, 'team': 'Delivery'},
{'allocated': None, 'team': 'Product'}]

但是注释只有这个:

<QuerySet 
[{'team': 'Delivery', 'unallocated': 0, 'allocated': 0},
{'team': 'Design', 'unallocated': 0, 'allocated': 0},
{'team': 'Engineering', 'unallocated': 0, 'allocated': 0},
{'team': 'Product', 'unallocated': 0, 'allocated': 0}]>

我是做错了还是可能是一个错误?

最佳答案

那是因为Count(…) [Django-doc]不计算 NULL,这就是 SQL 指定 COUNT 聚合如何工作的方式:它不考虑 NULL 值(对于AVG 例如)。但是您可以改为计算主键,例如:

from django.db.models import Count, Q

Demand.objects.filter(project=project).values('team').annotate(
unallocated=Count(<strong>'pk'</strong>, filter=Q(allocated=None)),
allocated=Count('allocated', filter=Q(allocated__isnull=False))
).order_by('team')

因此,你也可以将allocated简化为:

from django.db.models import Count, Q

Demand.objects.filter(project=project).values('team').annotate(
unallocated=Count(<strong>'pk'</strong>, filter=Q(allocated=None)),
allocated=Count('allocated')
).order_by('team')

关于python - Django 用空值注释字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71915375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com