多行的总和以检查值是否小于django中的引用模型
summation of multiple rows to check if value is less than referenced model in django
我尝试使用 Django 实现此 SQL 查询,其中可能会以相同的费用进行多次付款,而我必须获得低于费用金额的付款。
我已经使用
在相同的费用 ID 下获得了总付款
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 模型:
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')
)
我尝试使用 Django 实现此 SQL 查询,其中可能会以相同的费用进行多次付款,而我必须获得低于费用金额的付款。
我已经使用
在相同的费用 ID 下获得了总付款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 模型:
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')
)