I’m working on making some data consults in Django but I don’t understand quite well its ORM system yet. I need to get the transactions’ quantity for a particularly transaction’s projections. To put it briefly, I want to translate this SQL query to Python/Django syntax:
select cp.name, count(*) as total from core_transaction ct inner join core_projection cp on ct.projection_id = cp.id group by cp.name
These are the models involved:
class Transaction(models.Model): date = models.DateField() projection = models.ForeignKey('Projection', blank=False, null=False, related_name='transactions') class Projection(models.Model): name = models.CharField(max_length=150) description = models.CharField(max_length=300, blank=True, null=True)
Advertisement
Answer
You do this with an [.annotate(…)
clause [Django-doc]]:
from django.db.models import Count Projection.objects.annotate( total=Count('transactions') )
The Projection
objects that arise from this queryset will have an extra attribute .total
that contain the number of Transaction
s.