python - 在 django rest 框架中过滤日期时间范围

标签 python django django-rest-framework

我有一个模型,其字段名为 start_time,类型为 DateTimeField。我想查询与该字段重叠的范围。 Django 过滤器包含一个 DateFromToRangeFilter 过滤器,它非常适用于 dates 但不适用于 datetime 字符串(除非我查询不正确)。到目前为止,这是我尝试过的:

创建了一个DatetimeFromToRangeFilter:

class DatetimeRangeField(RangeField):
    def __init__(self, *args, **kwargs):
        fields = (
            forms.DateTimeField(),
            forms.DateTimeField())
        super(DatetimeRangeField, self).__init__(fields, *args, **kwargs)

    def compress(self, data_list):
        if data_list:
            start_datetime, stop_datetime = data_list
            if start_datetime:
                start_datetime = datetime.combine(start_datetime, time.min)
                if stop_datetime:
                    stop_datetime = datetime.combine(stop_datetime, time.max)
                    return slice(start_datetime, stop_datetime)
        return None

class DatetimeFromToRangeFilter(RangeFilter):
    field_class = DatetimeRangeField

将其用作过滤器:

class TestRunFilter(filters.FilterSet):
    start_time = filters.DatetimeFromToRangeFilter()

    class Meta:
        model = models.TestRun
        fields = ['start_time',]

当我使用 /test_runs/?start_time_0=2015-09-05/test_runs/?start_time_0=2015-09-05%2000:00:00 查询端点时code> 它不过滤查询集。

当我将过滤器更改为 django_filters.DateFromToRangeFilter 时,第一个查询返回适当的查询集,第二个查询返回一个空查询集。

最佳答案

与 django-filter 提供的 DateRangeField 相比,您的缩进看起来有些不当。

在 django_filters/fields.py 中:

        if start_date:
            start_date = datetime.combine(start_date, time.min)
        if stop_date:
            stop_date = datetime.combine(stop_date, time.max)
        return slice(start_date, stop_date)

在您的代码中:

        if start_datetime:
            start_datetime = datetime.combine(start_datetime, time.min)
            if stop_datetime:
                stop_datetime = datetime.combine(stop_datetime, time.max)
                return slice(start_datetime, stop_datetime)

尝试使缩进级别匹配,这应该可以解决您的问题。

关于python - 在 django rest 框架中过滤日期时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32914722/

相关文章:

python - Pandas:加入部分字符串匹配,如 Excel VLOOKUP

python - python函数是线程安全的吗? (特别是这个?)

django - 这是否有必要在 Kubernetes pod 中拥有多个进程/线程?

django.db.utils.ProgrammingError : relation "django_content_type" does not exist

python - 在 Python Django 中使用 Json

c++ - 试图理解 GCC-XML 输出变量的含义

python - “assert False”和 “self.assertFalse”有什么优势或区别

django - 注释两个字段相乘的和

javascript - 想要从 componentDidMount 传递数据但它总是未定义

django - 我如何保存当前用户的帖子而不查看 django Rest Framework 中端点中的所有用户列表