Django通过声明添加PK

时间:2017-05-18 12:31:47

标签: django python-3.x

我有一个简单的任务,我目前无法使用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

1 个答案:

答案 0 :(得分:0)

尝试:

AccountData.objects.filter(
    renter__id=16
).annotate(
    month=TruncMonth('bookingdate')
).values(
   'month'
).annotate(
   amountSum=Sum('amount')
)