我尝试了多种方法,但无法解决问题。
我有这样的事件模型:
class Event(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.CharField(max_length=250)
我希望按年份分组事件,然后按月分组:
扬
二月
扬
我在进行排序时只接受start_date。
最后我认为这会有效,但事实并非如此:
Event.objects.values_list('start_date__year').annotate(dcount=Count('start_date__year'))
答案 0 :(得分:2)
我可以告诉你如何分别对它们进行分组。这就是 I 的意思,但请注意我对django的了解不是世界上最好的。
Event.objects.filter(end_date__year=2013)
通过这种方式,您将获得2013年的所有活动。
您可以进一步过滤它们以获得月份。
Event.objects.filter(end_date__year=2013).filter(end_date__month='01')
这将为您提供二月份的所有日期。你可以简单地使用ModelManager
来管理这些自定义查询,因为你会做很多事情,然后你可以在你的视图中调用它们。
您可以像ModelManager
那样:
class EventManager(models.Manager):
def get_by_year(self, year):
Event.objects.filter(date__year=year)
你可以简单地通过Event.objects.get_by_year(2013)
来调用它。您可以在更改objects
中的Model
媒体资源后执行此操作,如下所示:
class Event(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.CharField(max_length=250)
objects = EventManager
答案 1 :(得分:1)
在查询数据后,您可以使用python的groupby()
函数。
这是一个例子。而不是date(),而是使用月份。 Django - Group By with Date part alone