#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.