Django rest fram中日期时间范围的过滤

2024-10-01 09:42:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为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

将此用作筛选器:

^{pr2}$

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

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


Tags: self过滤器datadatetimeiftimedefstart
1条回答
网友
1楼 · 发布于 2024-10-01 09:42:02

与django过滤器提供的DateRangeField相比,您似乎有一些不正确的缩进。在

在django_过滤器中/字段.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)

在您的代码中:

^{pr2}$

试着让缩进级别匹配,这样可以解决你的问题。在

相关问题 更多 >