Reputation: 514
I'm trying to calculate some related objects for user using Django ORM.
As for example I have 3 models: User
, A
, B
class A(models.Model):
creator = models.ForeignKey(
'users.User', on_delete=models.CASCADE, related_name='A_set'
)
class B(models.Model):
creator = models.ForeignKey(
'users.User', on_delete=models.CASCADE, related_name='B_set'
)
a_model = models.ForeignKey(
'a.A', on_delete=models.CASCADE, related_name='B_set'
)
My query looks like:
User.objects.annotate(a_count=Count('a_set')).annotate(b_count=Count('b_set'))
When b_count
always copying value a_count
except when real number of b
objects is 0. But when I'm splitting my query into two separate - it works good.
Upvotes: 1
Views: 107
Reputation: 47354
You should use Count
with distinct=True
argument:
User.objects.annotate(a_count=Count('a_set', distinct=True), b_count=Count('b_set', distinct=True))
Upvotes: 1