mat*_*ass 4 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)
Run Code Online (Sandbox Code Playgroud)
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',)
Run Code Online (Sandbox Code Playgroud)
例如:我有一个开始日期为 2012 年 1 月 14 日的活动。当我在日期过滤器中输入该值时,它什么也不返回。
我无法在 django_filter 的文档站点中找到有关 DateFilter 的更深入的描述,无论是在其过滤器参考还是使用 django-filter 指南中。或者一般的任何地方。有什么想法我可能做错了什么吗?
我不认为日期选择器小部件的日期格式有任何问题,因为它以另一种形式使用(用于输入数据)并且工作正常。
附加信息:我正在使用 django-1.6 以及 django-filter 的最新版本
发现问题了。
该'start'字段是日期时间字段。因此,当仅查询日期时,找不到匹配项,因为它与时间不匹配。
例如:
如果我输入 01/14/2012,它会查找开始日期datetime.date(2012, 01, 14, 0, 0),但实际开始日期可能是datetime.datetime(2012, 01, 14, 21, 0, tzinfo=<UTC>)。
解决方案:
使用lookup_type='startswith'or 'lookup_type='contains'( source ) 但'contains'似乎更快
Class EventFilter(django_filters.FilterSet):
start = django_filters.DateFilter(
'start', label=_('With start date'),
lookup_type='contains' # use contains
)
...
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以按日期过滤日期时间字段
start = django_filters.DateFilter('start__date')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13837 次 |
| 最近记录: |