如何使用django_filters.DateFilter?

时间:2014-02-13 01:04:37

标签: python django django-filter

我正在尝试使用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 referenceUsing django-filter guide中找到。或者一般的任何地方。我可能做错了什么想法?

我不认为datepicker小部件的日期格式有任何问题,因为它正在以另一种形式使用(输入数据)并且工作正常。

其他信息:我正在使用django-1.6以及最新版本的django-filter

2 个答案:

答案 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
    )

    ...