【发布时间】:2015-10-02 19:45:03
【问题描述】:
我有一个模型,其字段名为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 查询端点时,它不会过滤查询集。
当我将过滤器更改为django_filters.DateFromToRangeFilter 时,第一个查询返回适当的查询集,第二个查询返回一个空查询集。
【问题讨论】:
标签: python django django-rest-framework