在Django中获取早于10天的数据库表数据

时间:2019-09-02 19:10:51

标签: python django python-3.x python-2.7 django-views

我正在尝试检索早于10天的数据以更新该字段数据。目前我的模特是

class Restaurant(models.Model):
    is_approved = models.BooleanField(null=False, default=False)
    timestamp = models.DateTimeField(auto_now_add=True)

我的数据库表是

data creation dates

现在当我查询

dish = Restaurant.objects.filter(timestamp__gt=datetime.now() - timedelta(days=10))

我得到整个表的数据。甚至我都试图从一天改为一天。仍然是完整的数据库结果。

2 个答案:

答案 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分钟。