การกรอง django DatetimeField__date ไม่ทำงาน

ตามเอกสารที่เพิ่มใน v1.9 เรา สามารถสืบค้น DateTimeField ตามวันที่โดยไม่มีเวลาได้

ตัวอย่างได้แก่:

Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

แต่มันไม่ทำงานสำหรับฉัน:

class MilkStorage(models.Model):
    ....

    created_at = models.DateTimeField(null=False)

การใช้งาน

from datetime import date
MilkStorage.objects.filter(created_at__date=date.today())

ส่งคืนชุดแบบสอบถามว่าง <QuerySet []>

แบบสอบถามนี้ใช้ได้กับ PostgreSQL เท่านั้นหรือไม่ ฉันใช้ MySQL


person Roel    schedule 09.03.2017    source แหล่งที่มา
comment
คุณพูดถูก มันใช้งานไม่ได้กับแอปของฉันเช่นกัน หรือข้อเสนอแนะ @mohammed-shareef-c   -  person albar    schedule 09.03.2017
comment
ใช่แล้ว ฉันคิดว่าฉันต้องแจ้งปัญหาเกี่ยวกับเรื่องนี้บน GitHub   -  person Roel    schedule 09.03.2017
comment
ขออภัย ฉันทดสอบไม่ถูกต้อง มันใช้งานได้ในกรณีของฉัน บางทีคุณอาจไม่ได้สร้าง MilkStorage เลยในวันนี้ นั่นคือความผิดพลาดที่ฉันทำ   -  person albar    schedule 09.03.2017
comment
มันใช้งานได้จริงสำหรับฉัน และฉันสร้าง MilkStorage ด้วยวันที่ของวันนี้   -  person Roel    schedule 10.03.2017


คำตอบ (2)


นี่อาจเป็นทางออกที่ดีหรือไม่ก็ได้ ทั้งนี้ขึ้นอยู่กับความต้องการเฉพาะของคุณ ฉันพบว่า __date ใช้งานได้หากคุณตั้งค่า USE_TZ = False ใน settings.py

ฉันมีปัญหาเดียวกันนี้ (ฉันไม่สามารถกรองภายใน __ เดือนหรือ __ วันได้) จนกว่าฉันจะปิดการใช้งาน USE_TZ อีกครั้งอาจไม่เหมาะกับกรณีของคุณ แต่ควรให้ __date ทำงานอีกครั้ง

person J. Morris    schedule 14.06.2017
comment
ยืนยันว่าเป็นกรณีนี้สำหรับฉัน หากคุณมี USE_TZ = true ตัวกรอง __date จะไม่ทำงาน - person Par; 20.02.2019
comment
ฉันยังยืนยันสิ่งนี้ แต่มีทางเลือกอื่นอีกไหม - person Hafiz Siddiq; 15.06.2021

ฉันมีโมเดลนักท่องเที่ยว ในโมเดลนี้ ฉันกรองข้อมูลตามวันที่ ไม่ใช่เวลา และทำงานได้

รุ่น.py

Visitor(models.Model):
    timestamp = models.DateTimeField(_('Login Date Time'), auto_now=True)
    os_info = models.CharField(_('OS Information'), max_length=30, null=True)

มุมมอง.py

import datetime      
visitor = Visitor.objects.filter( timestamp__lte=datetime.datetime.now().date())
print visitor 

เอาท์พุท:

<Visitor: Windows 10>, <Visitor: Windows 10>]

ใช้วิธีด้านบนเพื่อกรองข้อมูลจากวันที่

person Neeraj Kumar    schedule 09.03.2017
comment
แต่คุณสามารถกรองโดยไม่มี __lte ได้ไหม - person Roel; 10.03.2017
comment
หากไม่มี __lte คุณจะต้องต่อท้าย __date เพื่อให้การจับคู่แบบตรงทั้งหมด - person albar; 10.03.2017