Django / Python:如何按日期对查询集结果进行分组?

时间:2013-04-13 04:21:20

标签: python django datetime django-models

我有一个图片上传模型,看起来像这样:

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 个答案:

答案 0 :(得分: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_datesjoes_images中的一组日期,您可以获得joes_images_separated作为字典(键是日期,值是每个日期joes_images的列表)

我很抱歉有点脏代码。我觉得这很有效。供您参考。