我試圖用Django實作這個SQL查詢,在同一費用下可能有多個付款,我必須獲得低于費用金額的付款。
我已經成功地在同一費用ID下獲得了總的付款,使用
Fee.objects.get(pk=self.pk).payment_set.aggregated(Sum('amount')
但是找不到一種方法來比較它和payment_fee.amount
。我試圖實作的SQL:
SELECT
payment_fee.id,
payment_fee.mount ,
SUM(payment_payment.mount)
as `su`。
FROM[/span
支付_payment
inner join payment_feeon
fee_id = payment_fee.id
GROUP By
費_id
HAVING[/span
(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)
uj5u.com熱心網友回復:
像下面這樣的做法應該可以。首先用所有相關的支付金額的總和來注釋每個費用,然后過濾這個注釋小于費用金額的費用
from djago.db.models import Sum, F
Fee.objects.annotate(
total_payments=Sum('feel_payment__amount')
).filter(
total_payments__lt=F('quantity')
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/327122.html
標籤:
上一篇:django在html上的for回圈不能為其object_lists檢索每個資料欄位
下一篇:只從SQLITE中洗掉第一個結果
