过滤django DatetimeField__date不起作用

时间:2017-03-09 16:57:24

标签: django django-models

根据v1.9中添加的document,我们可以无需时间按日期查询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

3 个答案:

答案 0 :(得分:2)

根据您的具体要求,这可能是也可能不是理想的解决方案。如果在settings.py

中设置USE_TZ = False,我发现__date有效

我有同样的问题(我甚至无法按__month或__day过滤),直到我禁用了USE_TZ。同样,可能不适合您的情况,但它应该__date再次工作。

答案 1 :(得分:0)

我有一个访客模型。在这个模型中,我通过日期而不是时间过滤数据并且它正在工作。

  

models.py

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

views.py

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

输出:

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

使用上述方法过滤日期数据。

答案 2 :(得分:0)

您可以使用多种方法根据日期进行过滤。 这里有一些

import datetime
custom_date = datetime.date(2005, 1, 1) 

Entry.objects.filter(pub_date__contains=custom_date) #Fastest in terms of performance

Entry.objects.filter(pub_date__startswith=custom_date)

Entry.objects.filter(pub_date__gte=custom_date)