2016-09-28 29 views
0

是否可以過濾models.DateTimeField,但只獲取過濾器對象中的月份?Django從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 =) ]

f ilter返回3行,但顯然有太多信息。我只需要幾個月,也許是一年。

我該如何做到這一點?

任何幫助或方向將不勝感激,

感謝

回答

1

如果您正在使用Django 1.10.x有Extract分貝功能

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) 
1

您可以使用歡迎使用屬性:

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 
+0

1.如果它是一種方法,它可以稱爲'get_year',但是對於一個屬性,只需將其稱爲'year'。 2.請注意,這隻適用於實例,而不是在查詢集 – wim

+0

上查詢,您可以這樣做:months = results.values_list('get_year',flat = True)?? |感謝您的闡述@wim –

+0

就像我說的,它不會在查詢集中工作。您必須改用理解,或改變字段。 – wim