Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django/Python:如何按日期对queryset结果进行分组?_Python_Django_Datetime_Django Models - Fatal编程技术网

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

Django/Python:如何按日期对queryset结果进行分组?,python,django,datetime,django-models,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_modif

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

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')
那么,我怎样才能按发表的日期对它们进行分组呢?(假设他不是每天发表,只是在某些日子发表)


该函数必须返回所有图像组。

为什么不执行以下操作

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\u dates
joes\u images
中的一组日期,您可以将
joes\u images\u分离为dict(键是日期,值是每个日期的
joes\u images


我很抱歉有一点肮脏的代码。我认为这是可行的。供您参考。

您为什么不做以下操作

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\u dates
joes\u images
中的一组日期,您可以将
joes\u images\u分离为dict(键是日期,值是每个日期的
joes\u images


我很抱歉有一点肮脏的代码。我认为这是可行的。供您参考。

您读过这个问题吗?不,我没有,这肯定解决了我问题的前半部分。这里,
upload\u date
字段是一个datetime.datetime对象,这意味着没有两个upload\u date值是相同的。我想分组只根据日期,而不是时间。我该怎么做呢?我想你必须使用
.extra()
来实现这一点,你不能
.order\u by()
在datetimefield上。不幸的是:(你可以将它转换为datetimefield并使用它。例如,有一个字段用于分组,另一个字段用于执行任何其他操作。(这有点超级棒,但它可以工作)Ref,您可以在
extra
中通过键入cast datetime to date来执行此操作
更清楚。你读过这个问题吗?没有,我没有,这肯定解决了我问题的前半部分。这里,
upload\u date
字段是datetime.datetime对象,这意味着没有两个upload\u date值是相同的。我只想根据日期而不是时间进行分组。我该怎么做?我想你必须使用
.extra()
为此,您不能在datetimefield上使用
.order_by()
,不幸的是:(您可以将其转换为datetimefield并使用它。例如,有一个字段用于分组,另一个字段用于执行任何其他操作。(这有点超级棒,但它可以工作)Ref,您可以在
extra
中通过键入cast datetime to date来执行此操作
更清晰。你不需要2个for循环。去掉upload\u dates:中d的
和if语句,只需为
joes\u images中的每个图像构建日期键
d
,你不需要2个for循环。去掉upload\u dates:
中d的
和if语句,只需构建日期键
d
对于
joes\u images