gpt4 book ai didi

django - 如何在日期时间字段上过滤 gte、lte 日期?

转载 作者:行者123 更新时间:2023-11-29 12:29:43 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用从日期时间中提取的日期来过滤 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})

你知道要做什么吗?

我不能使用 datetime__lte/gte 因为:

我有一个 Reservation 对象 r。

>> r.datetime
>> datetime.datetime(2017, 8, 31, 17, 55)
>> r.datetime.date()
>> datetime.date(2017, 8, 31)

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

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

>> []

因为它不仅看日期而且看时间。所以我需要提取日期才能正确过滤。

最佳答案

当您只想比较日期时间字段的日期部分时,您需要使用 date 转换。例如,

Reservation.objects.filter(datetime__date__lte=date(2017, 1, 1))

让它与 FilterSet 一起工作不需要自定义方法。过滤器表达式是通过连接过滤器构造函数的 field_namelookup_expr 参数构造的。 field_name 参数应对应于模型字段名称,lookup_expr 应说明转换和查找类型。

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

class Meta:
model = Reservation

关于django - 如何在日期时间字段上过滤 gte、lte 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com