如何在datetime字段中过滤gte,lte日期?

时间:2017-09-13 09:06:27

标签: 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})

你知道该怎么办吗?

我无法使用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))

>> []

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

2 个答案:

答案 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/