我正在尝试检索早于10天的数据以更新该字段数据。目前我的模特是
class Restaurant(models.Model):
is_approved = models.BooleanField(null=False, default=False)
timestamp = models.DateTimeField(auto_now_add=True)
我的数据库表是
现在当我查询
时dish = Restaurant.objects.filter(timestamp__gt=datetime.now() - timedelta(days=10))
我得到整个表的数据。甚至我都试图从一天改为一天。仍然是完整的数据库结果。
答案 0 :(得分:3)
如果您想要的数据更旧,则可能需要使用__lt
而不是__gt
。
import datetime
from django.utils import timezone as tz
d = tz.now() - datetime.timedelta(days=10)
dish = Restaurant.objects.filter(timestamp__lt=d)
Django建议使用timezone.now()
而不是datetime.now()
来确保时区信息正确。
答案 1 :(得分:1)
这绝对是一个错误。尝试使用timestamp__lt
获取较早的结果。 timestamp__gt
正在记录新结果的记录。我要求您为gt
尝试1分钟,它成功了。那应该显示整个数据库,因为所有这些都早于1分钟。而且,如上所述,Django建议使用timezone.now()
而不是datetime.now()
。所以您出错了,为什么timestamp__lt
返回整个数据库10天是因为所有帖子的发布时间都少于10天。但是lt
在1分钟内什么也不返回,因为所有数据都早于1分钟。