django - 使用日期时间对象来过滤 Django 中的查询集(截断为天)

标签 django django-orm

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

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-45self.user_filter.to_date26 august 03-00,则该对象将为过滤掉了。 我想要的是仅根据天数来过滤它们。例如,如果对象创建于 26 august 13-45self.user_filter.to_date16 august 03-00 – 两个日期时间仍然属于到某个日期,即8 月 26 日。我只想使用天数,并以某种方式截断 created_at 和( self.user_filter.from_date 、 self.user_filter.to_date)上的小时、分钟、秒等,然后仅进行比较年、月、日。

目标结果;

对象创建于26 august 13-45self.user_filter.to_date26 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/

相关文章:

python - 在 Django ORM 的单个请求中获取一个相关对象

python - Django Order By 对反向外键值删除没有关系的项目

django - 如何仅删除 m2m 关系?

python - 我无法从 python-dotenv 导入 dotenv

django - 学习 Django 1.5 的最佳方式是什么?

django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

django - 在Django的ORM中,有没有办法检测代码是否在事务内执行?

django - 访问表单集中的多对多 "through"关系字段

python - Django select_for_update 可以用来获取读锁吗?

python - 如何使用 Django 中基于类的通用 View 将父 id 作为 fk 传递给子对象的 ModelForm?