0
# models.py
from django.db import models

class Elephant(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    families = models.ForeignKey(Families, on_delete=models.CASCADE)

def add_families_and_locations_counts(elephants):
    return elephants.annotate(
            families_number=Count('families'),
            location_number=Count('location')
    )
# Run
output = add_families_and_locations_counts(elephants)

In the above, the counts are incorrect. How do I get the correct counts?

TD1
  • 374
  • 5
  • 12
  • Does this answer your question? [multiple annotate Sum terms yields inflated answer](https://stackoverflow.com/questions/12108710/multiple-annotate-sum-terms-yields-inflated-answer) – iklinac Nov 19 '19 at 19:47

1 Answers1

0

You want to count the distinct foreign key model instances.

Update your annotations function to the below:

def add_families_and_locations_counts(elephants):
    return elephants.annotate(
            families_number=Count('families', distinct=True),
            location_number=Count('location', distinct=True)
    )
TD1
  • 374
  • 5
  • 12