2013-04-13 104 views
1

我有圖片上傳的模型,看起來是這樣的:Django/Python:如何按日期對查詢集結果進行分組?

from django.db import models 
from django.contrib.auth.models import User 
import datetime 

class ImageItem(models.Model): 
    user = models.ForeignKey(User) 
    upload_date = models.DateTimeField(auto_now_add = True) 
    last_modified = models.DateTimeField(auto_now = True) 
    original_img = models.ImageField(upload_to = img_get_file_path) 

我要查詢屬於特定用戶的ImageItem的所有實例,並把它們組根據上傳日期。例如,對於某些用戶,我想要一個2013年4月9日的小組,以及2013年4月12日的另一個小組,等等(假設他們在這些日期上傳了一個或多個圖像)。

我想我運行一個簡單的查詢,比如,

joes_images = ImageItem.objects.filter(user__username='joe') 

但後來我又怎能組他們一天公佈?(假設他沒有每天發佈,只在某些日子發佈)

函數將不得不返回所有圖像組。

+1

你看過這個問題嗎? http://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django –

+0

不,我沒有,這絕對解決了我的問題的前半部分。這裏,'upload_date'字段是一個datetime.datetime對象,這意味着沒有兩個upload_date值是相同的。我只想按日期分組,而不是按時間分組。我會怎麼做? – sgarza62

+0

我認爲你必須使用'.extra()',你不能'.order_by()'在一個datetimefield上不幸:( –

回答

4

爲什麼你不按以下方式做?

joes_images = ImageItem.objects.filter(user__username='joe') # your code 
upload_dates = set([(i.year, i.month, i.day) for i in joes_images]) # set of upload_date 
joes_images_separated = dict([(d, []) for d in upload_dates]) 
for d in upload_dates: 
    for i in joes_images: 
     if (i.year, i.month, i.day) == d: 
      joes_images_separated[d].append(i) 

這裏,upload_dates是一家集joes_images的日期,你會得到joes_images_separated作爲字典(鍵是日期,值對每個日期的joes_images列表)。

我很抱歉有點髒的代碼。我認爲這是有效的。供你參考。

+0

你不需要2個for循環在'upload_dates'中去掉'for d'並且if語句只是構造'joes_images'中每個圖像的日期鍵'd' – rawbeans

相關問題