是否可以过滤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行,但显然信息太多了。我只需要几个月,也许一年。
我怎样才能做到这一点?
任何帮助或指示都将不胜感激,
由于
答案 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)