Суммирование нескольких строк для проверки, меньше ли значение, чем ссылающаяся модель в django

Я попытался реализовать этот SQL-запрос с помощью Django, где возможно несколько платежей по одной и той же комиссии, и мне нужно получить платежи, которые меньше суммы комиссии.

Мне удалось получить общее количество платежей по одному и тому же идентификатору платы, используя

Fee.objects.get(pk=self.pk).payment_set.aggregate(Sum('amount'))

но не могу найти способ сравнить его с payment_fee.amount

SQL Я пытался реализовать:

SELECT
    payment_fee.id,
    payment_fee.amount ,
    SUM(payment_payment.amount) 
    as `su`
FROM
    payment_payment
inner join payment_fee on
    fee_id = payment_fee.id
GROUP By
    fee_id
HAVING
    (su)<payment_fee.amount

django models:

class Fee(models.Model):
    amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)

class Payment(models.Model):
    fee = models.ForeignKey(Fee, on_delete=models.CASCADE, related_name='fee_payment')
    amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)

Должно сработать что-то вроде следующего. Сначала аннотируйте каждую плату суммой всех связанных сумм платежей, затем отфильтруйте платы, в которых эта аннотация меньше суммы платы

from djago.db.models import Sum, F

Fee.objects.annotate(
    total_payments=Sum('fee_payment__amount')
).filter(
    total_payments__lt=F('amount')
)
Вернуться на верх