如何过滤datetime字段上的gte,lte日期?

Mil*_*ano 1 django postgresql datetime django-filter django-postgresql

我试图弄清楚如何使用从datetime提取的日期过滤QuerySet。

我使用了Django-filter并且如果不遍历非常无效的QuerySet就无法编写这样的查询。

我尝试了datetime__date__gte不起作用。

class MyReservationsFilter(FilterSet):
    datetime__lte = DateFilter(method='datetime_filter',name='lte')
    class Meta:
        model = Reservation
        fields = {'status': ['exact'],
                  # 'datetime': ['lte', 'gte'],
                  'destination_from': ['exact'],
                  'destination_to': ['exact'],}


    def datetime_filter(self, queryset, name, value):

        lookup = 'datetime__'+name
        return queryset.filter(**{lookup:value})
Run Code Online (Sandbox Code Playgroud)

你知道该怎么办吗?

我不能使用,datetime__lte/gte因为:

我有一个Reservation对象r。

>> r.datetime
>> datetime.datetime(2017, 8, 31, 17, 55)
>> r.datetime.date()
>> datetime.date(2017, 8, 31)
Run Code Online (Sandbox Code Playgroud)

所以现在我尝试根据日期进行过滤:

Reservation.objects.filter(datetime__lte=datetime.date(2017, 8, 31),datetime__gte=datetime.date(2017, 8, 31))

>> []
Run Code Online (Sandbox Code Playgroud)

这是因为它不仅显示日期,而且显示时间。因此,我需要提取日期才能正确过滤。

She*_*rpa 8

如果只想比较datetime字段的日期部分,则需要使用date转换。例如,

Reservation.objects.filter(datetime__date__lte=date(2017, 1, 1))
Run Code Online (Sandbox Code Playgroud)

使它与FilterSets一起使用不需要自定义方法。过滤器表达式是通过连接过滤器构造函数的field_namelookup_expr参数构造的。该field_name参数应与模型字段名,而lookup_expr应该考虑变换和查找类型。

class MyReservationsFilter(FilterSet):
    datetime__lte = DateFilter(field_name='datetime', lookup_expr='date__lte')

    class Meta:
        model = Reservation
Run Code Online (Sandbox Code Playgroud)