我正在尝试使用django_filter的DateFilter来过滤确切的日期,但无法让它返回任何结果。
的myapp / models.py
from django.db import models
class Event(models.Model):
start = models.DateField()
title = models.CharField(_'title'), max_length=256)
的myapp / filters.py
from myapp.models import Event
import django_filters
class EventFilter(django_filters.FilterSet):
start = django_filters.DateFilter(
'start', label=_('With start date'),
widget=forms.DateInput() # I'm using a datepicker-like widget to enter date
)
class Meta:
model = Event
fields = ('start',)
例如: 我有一个开始日期为01/14/2012的活动。当我在日期过滤器中输入该值时,它什么都不返回。
我无法在django_filter的文档网站上找到有关DateFilter的更深入的描述,可以在filter reference或Using django-filter guide中找到。或者一般的任何地方。我可能做错了什么想法?
我不认为datepicker小部件的日期格式有任何问题,因为它正在以另一种形式使用(输入数据)并且工作正常。
其他信息:我正在使用django-1.6以及最新版本的django-filter
答案 0 :(得分:2)
您可以按日期过滤日期时间字段
start = django_filters.DateFilter('start__date')
答案 1 :(得分:1)
发现了这个问题。
'start'
字段是DateTimeField。因此,当仅查询日期时,找不到匹配项,因为它永远不会匹配时间。
例如:
如果我输入01/14/2012,它会查找开始日期datetime.date(2012, 01, 14, 0, 0)
,但实际开始日期可能为datetime.datetime(2012, 01, 14, 21, 0, tzinfo=<UTC>)
。
<强>解决方案:强>
使用lookup_type='startswith'
或'lookup_type='contains'
(source),但'contains'
似乎更快
Class EventFilter(django_filters.FilterSet):
start = django_filters.DateFilter(
'start', label=_('With start date'),
lookup_type='contains' # use contains
)
...