Как я могу перевести SQL-запрос в django ORM

#python #sql #django

#python #sql #django

Вопрос:

Я работаю над тем, чтобы провести некоторые консультации с данными в Django, но я пока не совсем хорошо понимаю его систему ORM. Мне нужно получить количество транзакций для конкретных прогнозов транзакции. Короче говоря, я хочу перевести этот SQL-запрос в синтаксис Python / Django:

 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
  

Это задействованные модели:

 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)
  

Комментарии:

1. Вы не можете. Например .filter() .exclude Q object , имеет тот же результат

Ответ №1:

Вы делаете это с помощью [ .annotate(…) предложения [Django-doc]]:

 from django.db.models import Count

Projection.objects.annotate(
    total=Count('transactions')
)  

Projection Объекты, возникающие из этого набора запросов, будут иметь дополнительный атрибут .total , содержащий количество Transaction s.