使用 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_date
是 26 august 000,则该对象将被过滤出去。
我想要的是仅根据天数过滤它们。例如,如果创建对象 26 august 13-45 并且 self.user_filter.to_date
是 16 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_date
是 8 月 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
我有一个关于日期时间过滤的问题。 我有以下代码:
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_date
是 26 august 000,则该对象将被过滤出去。
我想要的是仅根据天数过滤它们。例如,如果创建对象 26 august 13-45 并且 self.user_filter.to_date
是 16 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_date
是 8 月 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