Django如何获取最近10分钟内修改的所有Status模型记录?
问题修复方案
核心问题分析
- 时区不匹配:因为项目开启了
USE_TZ = True且时区设为UTC,直接用datetime.now()生成的是本地时间,和数据库中存储的UTC时间无法正确比对,导致时间范围计算错误。 - 查询逻辑颠倒:当前用
modificationtime__lte=ten_minutes_ago是筛选早于10分钟前的记录,和“最近10分钟内修改”的需求完全相反。
修改后的正确代码
from django.utils import timezone from datetime import timedelta from django.db.models import Q # 生成UTC时区的10分钟前时间点 ten_minutes_ago = timezone.now() - timedelta(minutes=10) # 筛选修改时间晚于等于10分钟前的记录 changedstatuslist = Status.objects.filter(Q(modificationtime__gte=ten_minutes_ago))
额外优化建议
- 若
modificationtime允许为空,可加上非空判断避免无效数据:changedstatuslist = Status.objects.filter( Q(modificationtime__gte=ten_minutes_ago) & Q(modificationtime__isnull=False) ) - 建议给
modificationtime设置auto_now=True,让Django自动维护修改时间,无需手动更新:modificationtime = models.DateTimeField(verbose_name="modificationtime", auto_now=True)
内容的提问来源于stack exchange,提问作者Curious San
相关产品推荐
相关产品推荐

