2017-05-18 71 views
0

我有一個簡單的任務,我目前無法使用Django QuerySet進行設計。下面的模型用於:Django通過聲明破壞組聲明添加PK

class Accountdata(models.Model): 
amount = models.DecimalField(max_digits=9, decimal_places=2) 
bookingdate = models.DateField() 
renter = models.ForeignKey(Renter, null=True, blank=True) 

所有我想要做的就是創建由概括了所有的每月租用者祈禱,量一組(承租人可以支付多次一個月)

我用下面的查詢集(對於一個特定租戶):

Accountdata.objects.filter(renter_id=16).annotate(month=TruncMonth('bookingdate'), amountSum=Sum('amount')).values('month', 'amountSum').order_by() 

不幸的是,結果是錯誤的。 我想通了,Django的添加主鍵到group by子句(使用的查詢集「查詢」梅索德,看看是怎麼回事)。

SELECT DATE_TRUNC(「月」,「accountdata」「bookingdate 「)AS」month「,SUM(」accountdata「。」amount「)AS」amountSum「FROM」accountdata「WHERE」accountdata「。」renter_id「= 16 GROUP BY 」accountdata「。」id「,DATE_TRUNC本月,‘accountdata’。‘bookingdate’)'

我不叩頭爲什麼Django的是這樣做的,因爲我沒有查詢集的‘值’部分中的ID。 使用Django 1.11和Python 3.6.1

回答

0

嘗試:

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

謝謝!這使得伎倆。 – BJS

+0

很高興幫助=) –