我尝试使用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
发布于 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'似乎更快
Class EventFilter(django_filters.FilterSet):
start = django_filters.DateFilter(
'start', label=_('With start date'),
lookup_type='contains' # use contains
)
...发布于 2021-01-10 07:03:10
您可以按日期筛选日期时间字段
start = django_filters.DateFilter('start__date')https://stackoverflow.com/questions/21743271
复制相似问题