10

日時フィールドを持つモデルがあります。

class MyModel(models.Model):
    created = models.DateTimeField(auto_now = True)

今日作成されたすべてのレコードを取得したい。

私は試した:

MyModel.objects.all().filter(created = timezone.now())

MyModel.objects.all().filter(created = timezone.now().date())

しかし、常に空のセットを取得しました。Djangoでこれを行う正しい方法は何ですか?

編集:

奇妙に見えますが、今日作成されたレコード (06.04.2012 23:09:44) には、データベースに日付 (2012-04-07 04:09:44) があります。管理パネルで編集しようとすると、正しく表示されます (06.04.2012 23:09:44)。Django は何とかそれを処理しますか?

4

3 に答える 3

14

より適切な解決策があるかもしれませんが、簡単な調査により、これが機能することが示唆されます。

from datetime import timedelta

start_date = timezone.now().date()
end_date = start_date + timedelta( days=1 ) 
Entry.objects.filter(created__range=(start_date, end_date))

timezone は日時のようなオブジェクトであると想定しています。

重要なことは、正確な時間をミリ秒単位で保存していて、それを 1 日の精度しかないものと比較していることです。時間、分、秒を破棄するのではなく、django/python はそれらをデフォルトで 0 に設定します。したがって、レコードが 2011-4-6T06:34:14am に作成された場合、2011-4-6T:06:34:14am と比較されます。 2011-4-6T00:00:00 まで、2011-4-6 (作成日から) から 2011-4-6 ( timezone.now().date() から) ではありません。役に立った?

于 2012-04-06T19:30:57.703 に答える
0

これを試して

from datetime import datetime
now=datetime.now()
YourModel.objects.filter(datetime_published=datetime(now.year, now.month, now.day))
于 2012-04-06T19:39:44.607 に答える