我正在尝试仅使用一个参数来过滤时间范围(例如'2014-12-27' < time <= '2014-12-28'
)。
我目前使用这样的网址来获得一天
http://127.0.0.1:8000/movieapi/movieshowtime/?mixtime=2014-12-27&maxtime=2014-12-28
我希望能够做到这样的事情
http://127.0.0.1:8000/movieapi/movieshowtime/?timerange=2014-12-27
但它不起作用。我目前使用的过滤器是
class MovieShowtimeFilter(django_filters.FilterSet):
mixtime = django_filters.DateTimeFilter(name="movietime",lookup_type='gte')
maxtime = django_filters.DateTimeFilter(name="movietime",lookup_type='lt')
timerange = django_filters.DateRangeFilter(name='movietime')
class Meta:
model = MovieShowtime
fields = ['mixtime','maxtime','timerange']
答案 0 :(得分:4)
DateRangeFilter
提供的django-filter
允许您过滤常见日期范围,例如“今天”,“过去一周”,“上个月”等。它不允许您过滤查询集到特定日期。
您应该可以使用自定义过滤器执行此操作。
from django_filters.filters import DateFilter
class WithinDateFilter(DateFilter):
def filter(self, qs, value):
from datetime import timedelta
if value:
date_value = value.replace(hour=0, minute=0, second=0)
filter_lookups = {
"%s__range" % (self.name, ): (
value,
value + timedelta(days=1),
),
}
qs = qs.filter(**filter_lookups)
return qs
这应该允许您通过网址传递单个日期,并将查询过滤到该特定日期内的次数。
class MovieShowtimeFilter(django_filters.FilterSet):
timerange = WithinDateFilter(name='movietime')
class Meta:
model = MovieShowtime
fields = ['mixtime','maxtime','timerange']