เลือกระหว่างสองวันที่ด้วย Django


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

@ Philip556677 เป็นฟิลด์ที่กำหนดขึ้นเองในแบบจำลอง คุณสามารถตั้งค่าพารามิเตอร์auto_now_addของ DateField เป็นTrue เพื่อให้ใช้งานได้ง่าย
Benbb96


1

สองวิธี

.filter(created_at__range=[from_date, to_date])

วิธีอื่น

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte หมายถึงมากกว่าเท่ากับ
  • lte หมายถึงน้อยกว่าเท่ากับ

Q Objects ไม่จำเป็นในวิธีที่สองคุณสามารถเขียน:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

หากคุณใช้ a การDateTimeFieldกรองด้วยวันที่จะไม่รวมรายการในวันสุดท้าย

คุณต้องแคสต์ค่าเป็นวันที่:

...filter(created_at__date__range=(start_date, end_date))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.