我正在尝试仅使用一个参数来过滤时间范围(例如 '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']
最佳答案
django-filter 提供的 DateRangeFilter
允许您过滤常见的日期范围,例如“今天”、“过去一周”、“上个月”等。它不允许您将查询集过滤到特定日期。
不过,您应该能够使用自定义过滤器来做到这一点。
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
这应该允许您通过 URL 传入单个日期,并将查询过滤为仅在该特定日期内的时间。
class MovieShowtimeFilter(django_filters.FilterSet):
timerange = WithinDateFilter(name='movietime')
class Meta:
model = MovieShowtime
fields = ['mixtime','maxtime','timerange']
关于python - 使用 django-filter 按单个日期过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27653962/