2012-03-30 25 views
1

我正在四處查看如何將Django查詢集按月分組。我終於發現了這個非常有用的代碼:在Django中按月分組並檢索爲datetime.date()

truncate_date = connection.ops.date_trunc_sql('day','timestamp') 
qs = qs.extra({'date':truncate_date}) 
return qs.values('date').annotate(Sum('amount')).order_by('date') 

Django: Group by date (day, month, year)

它工作得很好,但是其返回的date是一個字符串,而不是一個適當的datetime.date,我不能在使用{{date|date:format}}模板。似乎最初的發件人(奧利)有同樣的問題。儘管回答這個問題的人說它可以和postgres一起工作,但我並沒有用SQLite取得任何成功。

是否可以在查詢或模板中將字符串轉換爲日期時間。或者我必須循環所有條目?

對不起,發佈在分離的趨勢,但我沒有足夠的優惠只是在原來的評論。

回答

6

您可以嘗試使用regroup模板標記在模板級別按月分組。確保你的環境數據進行排序:

{% regroup queryset by date_field|date:"M, Y" as objects_by_month %} 
{% for group in objects_by_month %} 
    {{ group.grouper }} 
    {% for object in group.list %} 
     {{ object }} 
    {% endfor %} 
{% endfor %} 
+0

但後來因爲我需要「量」將不會歸納所有條目一個月(其他職位是這件事)。 我當前的查詢是這樣的: 'truncate_date = connection.ops.date_trunc_sql( '月', 'data_insercao')' 'fichas_report = Ficha.objects.extra(選擇= { '月':truncate_date} ).values('name','month')。 annotate(number_entries = Count('pk'))。order_by(' - month')' 它給了我一個月份的名字和條目列表。 – 2012-03-30 17:23:02