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语句,因为我有一个完整的时间戳。