首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用django_filters.DateFilter?

如何使用django_filters.DateFilter?
EN

Stack Overflow用户
提问于 2014-02-13 09:04:37
回答 2查看 9.5K关注 0票数 2

我尝试使用django_ filter的DateFilter根据确切的日期进行过滤,但无法让它返回任何结果。

myapp/models.py

代码语言:javascript
复制
from django.db import models

class Event(models.Model):
    start = models.DateField()
    title = models.CharField(_'title'), max_length=256)

myapp/filters.py

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-14 13:02:52

找到问题所在。

'start'字段是一个DateTimeField。因此,当仅查询日期时,找不到任何匹配,因为它永远不会与时间匹配。

为例:

如果我输入2012年1月14日,它将查找开始日期datetime.date(2012, 01, 14, 0, 0),但实际开始日期可能是datetime.datetime(2012, 01, 14, 21, 0, tzinfo=<UTC>)

解决方案:

使用lookup_type='startswith''lookup_type='contains' (source),但'contains'似乎更快

代码语言:javascript
复制
Class EventFilter(django_filters.FilterSet):
    start = django_filters.DateFilter(
        'start', label=_('With start date'),
        lookup_type='contains' # use contains
    )

    ...
票数 3
EN

Stack Overflow用户

发布于 2021-01-10 07:03:10

您可以按日期筛选日期时间字段

代码语言:javascript
复制
start = django_filters.DateFilter('start__date')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21743271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档