我正在尝试弄清楚如何使用从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})
你知道该怎么办吗?
我无法使用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))
>> []
这是因为它不仅仅关注日期,而且关注时间。所以我需要提取日期才能正确过滤。
答案 0 :(得分:5)
如果只想比较日期时间字段的日期部分,则需要使用devtools::load_all()
转换。例如,
roxygen2::roxygenise()
使用date
来解决此问题并不需要自定义方法。通过连接过滤器构造函数的Reservation.objects.filter(datetime__date__lte=date(2017, 1, 1))
和FilterSet
参数来构造过滤器表达式。 field_name
参数应与模型字段名称相对应,lookup_expr
应考虑转换和查找类型。
field_name
答案 1 :(得分:-1)
如果您使用的是Django 1.9,可以使用
进行过滤Model.objects.filter(datetime__date = date.today())
如果没有,你可以像这样过滤
Model.objects.filter(post_date__year=date.year,
post_date__month=date.month,
post_date__day=date.day)
我知道打字太多了。但这是我猜的唯一方法。
在此处找到:https://chrisbartos.com/articles/how-to-filter-a-datetimefield-by-todays-date-in-django/