Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django rest框架中日期时间范围的筛选_Python_Django_Django Rest Framework - Fatal编程技术网

Python django rest框架中日期时间范围的筛选

Python django rest框架中日期时间范围的筛选,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个模型,其字段名为start\u time,类型为DateTimeField。我想查询与此字段重叠的范围。Django过滤器包含一个DateFromToRangeFilter过滤器,它可以完美地用于日期,但不能用于日期时间字符串(除非我查询不正确)。以下是我迄今为止所尝试的: 创建了一个DatetimeFromToRangeFilter: class DatetimeRangeField(RangeField): def __init__(self, *args, **kwargs

我有一个模型,其字段名为
start\u time
,类型为
DateTimeField
。我想查询与此字段重叠的范围。Django过滤器包含一个
DateFromToRangeFilter
过滤器,它可以完美地用于日期,但不能用于日期时间字符串(除非我查询不正确)。以下是我迄今为止所尝试的:

创建了一个
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\u runs/?start\u time\u 0=2015-09-05
/test\u runs/?start\u time\u 0=2015-09-05%2000:00:00
查询端点时,它不会过滤查询集


当我将筛选器更改为
django\u filters.datefromtrangefilter
时,第一个查询返回适当的查询集,第二个查询返回空查询集。

与django filter提供的DateRange字段相比,您似乎有一些不正确的缩进

在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)

试着让缩进级别匹配,这会解决你的问题。

哇,有时候我应该检查明显的东西。。。非常感谢。作为旁注,我可以简单地删除combine语句,因为我有一个完整的时间戳。