2016-09-28 9 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,6168675、tzinfo =)、 datetime.datetime(2016,9,22,15,5,20,939593、tzinfo =) ]

f ilterは3行を返しますが、明らかに情報が多すぎます。私は数ヶ月、そしておそらく年が必要です。

どうすればこの問題を解決できますか?

すべてのヘルプや方向は、

おかげ

答えて

1

あなたはジャンゴ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

をいただければ幸いあなたは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 
+0

1.メソッドの場合は 'get_year'と呼びますが、プロパティの場合は' year'を呼び出します。 2.これは、クエリーセット – wim

+0

ではなくインスタンスでのみ機能し、クエリーを実行することに注意してください。months = results.values_list( 'get_year'、flat = True)?? |細かいことをありがとう@wim –

+0

私が言ったように、それはquerysetで動作しません。代わりに理解を使用するか、フィールドを変更する必要があります。 – wim

関連する問題