2

我尝试了多种方法,但无法解决。

我有这样的事件模型:

class Event(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    location = models.CharField(max_length=250)

我想按年和月对事件进行分组:

2013

  1. 活动一
  2. 活动 2

二月

  1. 活动一
  2. 活动 2

2014

  1. 活动一
  2. 活动 2

我只在进行排序时使用 start_date 。

最后我认为这会起作用,但它没有:

Event.objects.values_list('start_date__year').annotate(dcount=Count('start_date__year'))
4

2 回答 2

2

我可以向您展示如何将它们分开分组。这就是的做法,但请注意,我对 django 的了解并不是世界上最好的。

Event.objects.filter(end_date__year=2013)

这样,您将获得 2013 年的所有事件。

您可以进一步过滤它们以获取月份。

Event.objects.filter(end_date__year=2013).filter(end_date__month='01')

这将为您提供二月份的所有日期。您可以简单地使用 aModelManager来管理这些自定义查询,因为您会经常使用它们,然后您可以在视图中调用它们。

你可以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
于 2013-07-18T20:48:17.120 回答
1

查询完数据后就可以使用python的groupby()函数了。

这是一个例子。而不是 date() 您将使用月份。 Django - Group By 仅包含日期部分

于 2013-07-18T21:14:01.277 回答