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

标签 python django django-rest-framework django-filter

我正在尝试仅使用一个参数来过滤时间范围(例如 '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/

相关文章:

python - 在Python中,如何模拟c扩展类?

python - 登录 Python/Django 未按预期工作

mysql - Django 模型创建时的竞争条件

django - Django ElasticSearch DSL DRF聚合

python - 类型错误 : detail() missing 1 required positional argument: 'request'

python - 合并从 python 多进程调用函数返回的数据帧

javascript - Django:我怎样才能获取pdf文件的各个部分并跳转到它们?

django - 尽管字段为空,序列化器 is_valid() 返回 true

python - 为什么 Python 中的元素对于...在...: statements use byValue behavior?

python - 如何使用 DRY 配置部署多个 Django 站点?