如何使用Django ORM删除24小时前的所有Question模型记录?
Django ORM删除创建时间超过24小时的Question记录
要完成删除创建时间超过24小时的记录,你需要基于date_time字段构建过滤条件,核心是筛选出时间早于当前时间减去24小时的记录,具体实现如下:
推荐实现(考虑时区)
如果你的Django项目开启了时区支持(settings.py中USE_TZ = True),使用Django的timezone模块处理时间更准确:
from django.utils import timezone import datetime # 计算24小时前的时间阈值 threshold = timezone.now() - datetime.timedelta(hours=24) # 执行删除操作 Question.objects.filter(date_time__lt=threshold).delete()
也可以将条件直接内联简化:
from django.utils import timezone import datetime Question.objects.filter(date_time__lt=timezone.now() - datetime.timedelta(hours=24)).delete()
不考虑时区的实现(仅适用于关闭时区的项目)
如果项目未启用时区(USE_TZ = False),可以直接使用原生datetime模块:
import datetime threshold = datetime.datetime.now() - datetime.timedelta(hours=24) Question.objects.filter(date_time__lt=threshold).delete()
关键说明
__lt是Django ORM的字段查询运算符,表示“小于(less than)”,用来匹配date_time早于阈值的记录。- 注意模型中
date_time字段使用了auto_now=True,该设置会在每次保存对象时更新时间。如果你的需求是基于创建时间而非最后修改时间,建议将字段改为auto_now_add=True(仅在对象创建时设置一次时间)。
内容的提问来源于stack exchange,提问作者Amol_G
相关产品推荐
相关产品推荐

