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')

Jawaban:


230

Gunakan __rangeoperator:

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

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


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

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))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.