使用 datetime 对象过滤 Django 中的查询集(截断为天)

use datetime objects to filter queryset in Django (truncate to days)

我有一个关于日期时间过滤的问题。 我有以下代码:

def filter_by_transaction_date(self, queryset):
    if self.user_filter.from_date:
        queryset = queryset.filter(created_at__gte=self.user_filter.from_date)

    if self.user_filter.to_date:
        queryset = queryset.filter(created_at__lte=self.user_filter.to_date)
    return queryset

其中queryset显然是一个queryset,

 created_at = models.DateTimeField(auto_now_add=True),
self.user_filter.from_date== models.DateTimeField(null=True, blank=True)
self.user_filter.to_date = models.DateTimeField(null=True, blank=True)

在这种情况下过滤的作用是检查 created_at 字段是否包含 2 个日期时间,也就是说我们基本上在这里操作时间戳。

问题。例如,如果对象创建于 26 august 13-45 并且 self.user_filter.to_date26 august 000,则该对象将被过滤出去。 我想要的是仅根据天数过滤它们。例如,如果创建对象 26 august 13-45 并且 self.user_filter.to_date16 august 03-00 – 两个日期时间仍然属于一个日期,即 8 月 26 日。我只想在 created_at 和 ( self.user_filter.from_date , self.user_filter.to_date) 上使用天数并以某种方式截断小时、分钟、秒等,并且只比较年、月和日。

目标结果;

对象创建于 8 月 13-45 日 26 日 并且 self.user_filter.to_date8 月 03-00 日 26 日, 我们截断时间,只保留日期 我们比较 8 月 26 日 <= 8 月 26 日 -True,对象进入过滤器...

不好意思解释的很纠结,如有

谢谢...

您可以添加一个__date lookup [Django-doc]:

def filter_by_transaction_date(self, queryset):
    if self.user_filter.from_date:
        queryset = queryset.filter(<b>created_at__date__gte=</b>self.user_filter.from_date.date())

    if self.user_filter.to_date:
        queryset = queryset.filter(<b>created_at__date__lte=</b>self.user_filter.to_date)
    return queryset