如何使用 django_filters.DateFilter?

Posted

技术标签:

【中文标题】如何使用 django_filters.DateFilter?【英文标题】:How to use django_filters.DateFilter? 【发布时间】:2014-03-11 16:24:50 【问题描述】:

我正在尝试使用 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',)

例如: 我有一个开始日期为 2012 年 1 月 14 日的活动。当我在日期过滤器中输入该值时,它什么也不返回。

我无法在 django_filter 的文档站点中找到关于 DateFilter 的更深入的描述,无论是在其 filter reference 或 Using django-filter guide 中。或一般的任何地方。有什么想法我可能做错了吗?

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

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

【问题讨论】:

可能不相关,或者只是将代码粘贴到 SO 中的拼写错误,但 fields = ('start') 是一个字符串,应该是 fields = ('start',) 谢谢 - 这是我的错字。代码中是fields = ( 'start', ) 'start' 中的... = django_filters.DateFilter('start', ... 有必要吗? 定义fields 将限制过滤器可以使用的字段。在您的示例中,title 不可用。 过滤变量的名称是否必须与模型的字段名称匹配?例如,如果模型字段名称为start,我可以使用start_date作为过滤变量吗? 【参考方案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
    )

    ...

【讨论】:

【参考方案2】:

您可以按日期过滤日期时间字段

start = django_filters.DateFilter('start__date')

【讨论】:

以上是关于如何使用 django_filters.DateFilter?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?