Как исправить несколько аннотаций Сумма дать неправильный ответ - PullRequest
0 голосов
/ 24 апреля 2019

я хочу аннотировать количество наблюдений за наблюдениями и подсчетами наблюдений в этой группе.

модели: -

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")

многократные аннотации Суммарные условия дают завышенный ответ

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)) 

1 Ответ

0 голосов
/ 25 апреля 2019

Я нашел решение, которое работает для меня.

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))

...