Memfilter Django DatetimeField__date tidak berfungsi

Menurut dokumen yang ditambahkan pada v1.9 kami dapat menanyakan DateTimeField berdasarkan tanggal tanpa waktu.

Contohnya adalah:

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

Tapi itu tidak berhasil untuk saya:

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

    created_at = models.DateTimeField(null=False)

Penggunaan

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

Ini mengembalikan kumpulan kueri kosong <QuerySet []>.

Apakah kueri ini hanya berfungsi di PostgreSQL? saya menggunakan MySQL.


person Roel    schedule 09.03.2017    source sumber
comment
Anda benar, ini tidak berfungsi di aplikasi saya juga, begitu pula saran @ mohammed-shareef-c.   -  person albar    schedule 09.03.2017
comment
ya saya rasa saya perlu mengangkat masalah ini di github   -  person Roel    schedule 09.03.2017
comment
Maaf, saya tidak menguji dengan benar. Ini berfungsi dalam kasus saya. Mungkin Anda belum membuat MilkStorage hari ini, Itulah kesalahan yang saya lakukan.   -  person albar    schedule 09.03.2017
comment
itu benar-benar berfungsi untuk saya dan saya membuat MilkStorage dengan tanggal hari ini.   -  person Roel    schedule 10.03.2017


Jawaban (2)


Tergantung pada kebutuhan spesifik Anda, ini mungkin merupakan solusi ideal atau mungkin juga bukan. Saya menemukan bahwa __date berfungsi jika Anda menyetel USE_TZ = False di settings.py

Saya mengalami masalah yang sama (saya bahkan tidak dapat memfilter berdasarkan __bulan atau __hari) hingga saya menonaktifkan USE_TZ. Sekali lagi, mungkin tidak ideal untuk kasus Anda, tetapi __date akan berfungsi kembali.

person J. Morris    schedule 14.06.2017
comment
konfirmasikan hal ini pada saya, jika Anda memiliki USE_TZ = true, maka filter __date tidak berfungsi. - person Par; 20.02.2019
comment
Saya juga mengonfirmasi hal ini, tetapi ada alternatif lain? - person Hafiz Siddiq; 15.06.2021

Saya memiliki model pengunjung. Dalam model ini saya memfilter data berdasarkan tanggal bukan waktu dan itu berfungsi.

model.py

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

dilihat.py

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

Keluaran:

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

Gunakan cara di atas untuk memfilter data dari tanggal.

person Neeraj Kumar    schedule 09.03.2017
comment
tetapi bisakah Anda memfilternya tanpa __lte? - person Roel; 10.03.2017
comment
Tanpa __lte, Anda harus menambahkan __date agar sama persis. - person albar; 10.03.2017