我有一个关于日期时间过滤的问题。 我有以下代码:
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显然是一个查询集,
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 03-00,则该对象将为过滤掉了。
我想要的是仅根据天数来过滤它们。例如,如果对象创建于 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
)上的小时、分钟、秒等,然后仅进行比较年、月、日。
目标结果;
对象创建于26 august 13-45,self.user_filter.to_date
是26 august 03-00,
我们截断时间,只保留日期
我们比较 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
关于django - 使用日期时间对象来过滤 Django 中的查询集(截断为天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715189/