I have a model called Item, with m2m relation to User ("owner").
For each item, I need to count users who own it. That’s easy enough with annotate()
But then I need to calculate ratio between owners of specific gender and total owner count for each item. For example if, 2 males own the item out of 5 users, the ratio is 0.4.
What’s the best way to do that?
To do this with the ORM, you need conditional aggregates, which aren’t supported in Django. http://www.voteruniverse.com/Members/jlantz/blog/conditional-aggregates-in-django proposes a hacky solution that might work.
If you don’t need to sort by the ratio, then you can make two calls to annotate, and then compute the ratio in Python. Something like:
If you don’t want to do that, I’d recommend using the
extra()method and some custom sql to get the extra info you want. Documentation for that method is on the Django Queryset API documentation page.