Аннотирование с помощью Count приводит к неправильным значениям с NullBooleanField
Я выполняю следующий запрос с несколькими аннотациями:
(AwardIssueProcess.objects.filter(grant__client=client, completed=completed_status)
.annotate(total_awarded=Sum('award__awardissuedactivity__units_awarded'),
num_accepted=Count(Case(When(award__accepted=True, then=1))),
num_rejected=Count(Case(When(award__accepted=False, then=1))),
num_unaccepted=Count(Case(When(award__accepted=None, then=1)))))
Тем не менее num_unaccepted
дает неверные значения. Во-первых, если у меня есть награды, число иногда вдвое больше, чем я ожидаю. Но если я уберу
total_awarded=Sum('award__awardissuedactivity__units_awarded')
от аннотации проблема удвоения исчезнет.
Во-вторых, num_unaccepted
имеет значение 1, если нет наград. Но когда есть награды, значение является правильным (но не во всех случаях из-за проблемы удвоения, о которой я упоминал ранее). Во втором выпуске я подозреваю, что это может быть связано с тем, что None
, но то, что я действительно хочу, это чтобы проверить, если accepted
поле None
, А потом, если награды не существует, просто не считайте ее. accepted
поле является NullBooleanField
,
Как я должен писать это по-другому, чтобы решить эти две проблемы с num_unaccepted
?
РЕДАКТИРОВАТЬ
Я удалил total_awarded=Sum('award__awardissuedactivity__units_awarded')
из аннотации и создал отдельную функцию, чтобы получить total_awarded
количество, которое мне нужно. Это решает мою первую проблему, но вторая проблема все еще остается.