gpt4 book ai didi

python - 使用 django-filter 按单个日期过滤

转载 作者:行者123 更新时间:2023-11-28 22:46:18 25 4
gpt4 key购买 nike

我正在尝试仅使用一个参数来过滤时间范围(例如 '2014-12-27' < time <= '2014-12-28')。

我目前使用这样的 url 获取一天

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com