我有SQL查询,我需要在Django中使用ORM技术。
SELECT a.id, a.amount, SUM(b.amount) FROM cashflow_statement a, cashflow_statement b WHERE b.id <= a.id GROUP BY a.id ORDER BY a.id
编辑:Django模型
class Statement(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
date = models.DateField()
def __str__(self):
return self.title
输入数据
id, amount, date
1. 10 25/06/2020
2. -10 25/06/2020
3. 40 25/06/2020
4. 10 25/06/2020
5. -30 25/06/2020
6. 10 25/06/2020
Need Output:
id, amount, sum
1. 10. 10
2. -10. 0
3. 40. 40
4. 10. 50
5. -30. 20
6. 10. 30
x=Statement.objects.filter(date='your date')
sum=0
for i in x:
sum+=x.amount
也许我在代码中有错误,但是我认为您正在寻找.filter()部分。如果您需要同时使用多个过滤器,则可能是这样的:
x=Statement.objects.filter(date='your date').filter(amount<10)
from django.db.models import OuterRef, Sum, Subquery, Value
Statement.objects.annotate(
sum=Subquery(
Statement.objects.filter(
pk__lte=OuterRef('pk')
).values(x=Value(None)).order_by('x').annotate(
sum=Sum('amount')
).values('sum')[:1]
)
)