Djangoで2つの日付を選択する


116

Djangoで日付を選択するクエリを作成しようとしています。

生のSQLでこれを簡単に行う方法を知っていますが、Django ORMを使用してこれをどのように実現できますか?

これは、クエリに30日間の日付を追加する場所です。

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

回答:


230

__range演算子を使用します。

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

「created_at」はモデル内の任意のフィールドですか、それともレコードが作成されたときのデータベースの実際のログですか?
Bigbob556677 2018年

@ Philip556677これはモデルの任意のフィールドです。簡単に設定できるように、DateFieldのauto_now_addパラメータをTrueに設定できます。
Benbb96 2018年


1

2つの方法

.filter(created_at__range=[from_date, to_date])

別の方法

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gteは等しい
  • lteは等しいより小さいことを意味します

Qは、第2の方法では不要であり、あなたが書くことができますオブジェクト:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

あなたが使用している場合 DateTimeField、日付によるフィルタリングには最終日のアイテムは含まれません。

値を日付としてキャストする必要があります。

...filter(created_at__date__range=(start_date, end_date))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.