如何修复多个注释Sum给出了错误的答案

问题描述 投票:0回答:1

我想在该组中注释observation_taken count和observation_given count。

楷模 : -

class Observation(TimeStampedEnumeratedUUIDModel):
rubric = models.ForeignKey('rubrics.Rubric', related_name='observations')
gro`enter code here`up = models.ForeignKey(
    'access.Group', related_name='group_observations')
observer = models.ForeignKey(
    'access.UserRoleAccount', related_name='user_observations_taken')
observee = models.ForeignKey(
    'access.UserRoleAccount', related_name='user_observations_given')
is_published = models.BooleanField(default=False)

class UserRoleAccount(TimeStampedUUIDModel):
user = models.OneToOneField(User, related_name="user_role_account")
role = models.ForeignKey(Role, related_name="user_role_account")
account = models.ForeignKey(Account, related_name="user_role_account")

multiple annotate Sum terms yields inflated answer

UserRoleAccount.objects.filter(pk='24f4a032-3f83-4123-8330fa60fcbb880c').annotate(count=Sum(Case(When(user_observations_taken__group=grp,then=1)),default=0,output_field=IntegerField(),distinct=True)).annotate(count1=Sum(Case(When(user_observations_given__group=grp,then=1)),default=0,output_field=IntegerField(),distinct=True)) 
python django django-models django-orm
1个回答
0
投票

我找到了一个适合我的解决方案。

ura = UserRoleAccount.objects.filter(pk='24f4a032-3f83-4123-8330-fa60fcbb880c'). annotate(taken_count=Count(Case(When(user_observations_given__group=grp,then='user_observations_given')),distinct=True)). annotate(given_count=Count(Case(When(user_observations_taken__group=grp,then='user_observations_taken')),distinct=True))

© www.soinside.com 2019 - 2024. All rights reserved.