Django从models.DateTimeField获得数月

时间:2016-09-28 02:44:10

标签: python django datetime

是否可以过滤models.DateTimeField但只获取过滤器对象中的月份?

该字段是:

time_stamp = models.DateTimeField(
            default=timezone.now)

当我过滤它时,这就是我得到的:

  

[datetime.datetime(2016,9,22,15,2,48,867473,tzinfo =),   datetime.datetime(2016,9,22,15,4,22,618675,tzinfo =),   datetime.datetime(2016,9,22,15,5,20,939593,tzinfo =)]

过滤器返回3行,但显然信息太多了。我只需要几个月,也许一年。

我怎样才能做到这一点?

任何帮助或指示都将不胜感激,

由于

2 个答案:

答案 0 :(得分:2)

你可以使用propety:

Class your_model(models.Model):

    time_stamp = models.DateTimeField(
        default=timezone.now)

    @property
    def _get_year(self):
        return self.time_stamp.strftime("%Y-%m")

    year = property(_get_year) #EDIT

答案 1 :(得分:1)

如果您使用的是django 1.10.x,则有Extract db函数

from django.db.models.functions import Extract

months = MyModel.objects.annotate(month_stamp=Extract('time_stamp', 'month')).values_list('month_stamp', flat=True)

对于django 1.9.x

from django.db.models import Func

def Extract(field, date_field='DOW'):
    template = "EXTRACT({} FROM %(expressions)s::timestamp)".format(date_field)
    return Func(field, template=template)

months = MyModel.objects.annotate(month_stamp=Extract('time_stamp', 'month')).values_list('month_stamp', flat=True)