Django аннотирует сумму на fk_set
Я пытаюсь аннотировать сумму полей в связанном наборе:
Мои модели:
class Report(models.Model):
class ReportCommissionPosition(models.Model):
report = models.ForeignKey(Report)
reservation = models.OneToOneField("reservations.Reservation")
class Reservation(models.Model):
class Payment(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
reservation = models.ForeignKey('reservations.Reservation')
PAYMENT_TYPES=(
('TRANS', 'TRANS'),
('SELL', 'SELL'),
payment_accounting_type = models.CharField(max_length=50, choices=PAYMENT_TYPES)
Мне нужно аннотировать каждую позицию report.reportcommissionposition_set двумя полями:
trans_amount - Сумма всех платежей с типом учета платежа == 'ПРОДАЖА' (через резервирование => платежа) sum_amount - Сумма всех платежей с типом учета платежа == 'ПЕРЕВОД' (через резервирование => платежа)
Я пробовал:
for position in commission_position:
position.sell_pay = position.reservation.payment_set.filter(payment_accounting_type='SELL').aggregate(amount=Sum('amount'))['amount']
Но это создает новый запрос для каждого элемента.
Какие-нибудь мысли?
<
Вернуться на верх
myreport.reportcommissionposition_set.annotate(
trans_amount=Sum(
'reservation__payment__amount',
filter=Q(reservation__payment__type='SELL')
),
sum_amount=Sum(
'reservation__payment__amount',
filter=Q(reservation__payment__type='TRANS')
)
)
объекты ReportCommissionPosition
из myreport
будут иметь два дополнительных поля: .trans_amount
и .sum_amount
с суммами платежей SELL
и TRANS
соответственно.