我有一个简单的任务,我目前无法使用Django QuerySet进行设计。使用以下模型:
class Accountdata(models.Model):
amount = models.DecimalField(max_digits=9, decimal_places=2)
bookingdate = models.DateField()
renter = models.ForeignKey(Renter, null=True, blank=True)
我想要做的就是创建一个小组,用以汇总每月租房者支付的所有金额(租房者可以每月支付多次)
我使用了以下QuerySet(针对一个特定的租用者):
Accountdata.objects.filter(renter_id=16).annotate(month=TruncMonth('bookingdate'), amountSum=Sum('amount')).values('month', 'amountSum').order_by()
不幸的是结果是错误的。 我发现Django将主键添加到group by子句中(使用QuerySet" query" methode来查看发生了什么):
SELECT DATE_TRUNC(' month'," accountdata"。" bookingdate")AS" month",SUM(" accountdata& #34;。"金额")AS" amountSum"来自" accountdata"在哪里" accountdata"。" renter_id" = 16 GROUP BY " accountdata"。" id" ,DATE_TRUNC(' month'," accountdata"。& #34; bookingdate&#34)'
我不知道为什么Django这样做,因为我没有#34;值" QuerySet的一部分。 使用Django 1.11和Python 3.6.1
答案 0 :(得分:0)
尝试:
AccountData.objects.filter(
renter__id=16
).annotate(
month=TruncMonth('bookingdate')
).values(
'month'
).annotate(
amountSum=Sum('amount')
)