Pilih di antara dua tanggal dengan Django

116

Saya mencari untuk membuat kueri yang memilih antara tanggal dengan Django.

Saya tahu bagaimana melakukan ini dengan SQL mentah dengan cukup mudah, tetapi bagaimana ini bisa dicapai dengan menggunakan Django ORM?

Di sinilah saya ingin menambahkan antara tanggal 30 hari dalam kueri saya:

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')
Jeff Taggarty
sumber

Jawaban:

230

Gunakan __rangeoperator:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))
Daniel Roseman
sumber
Apakah "create_at" merupakan bidang arbitrer dalam model atau apakah ini log database yang sebenarnya saat rekaman dibuat?
Bigbob556677
@ Philip556677 Ini adalah bidang sewenang-wenang dalam model. Anda dapat mengatur parameter auto_now_add DateField ke True untuk memilikinya dengan mudah.
Benbb96
21

__range

Ignacio Vazquez-Abrams
sumber
1

dua metode

.filter(created_at__range=[from_date, to_date])

metode lain

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte berarti lebih besar dari sama
  • lte artinya kurang dari sama
Manjuanth VM
sumber
Objek Q tidak diperlukan dalam metode kedua, Anda dapat menulis:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno
0

Jika Anda menggunakan DateTimeField, Memfilter dengan tanggal tidak akan menyertakan item pada hari terakhir.

Anda perlu memasukkan nilai sebagai tanggal:

...filter(created_at__date__range=(start_date, end_date))
suhailvs
sumber