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

4

我正在尝试检索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))

我获取了整个表格的数据。即使我试图从一天变成1天,它仍然是完整的数据库结果。


1
我认为该查询正在查找比10天新的记录,而不是比10天旧的记录。尝试使用timestamp__lt代替。 - John Gordon
@JohnGordon 即使我查询最近2天或1天的数据,它仍然返回空值。 - gamer
1
这些时间戳都还不到一天(24小时)的时间。 - John Gordon
@JohnGordon 是的,我知道我错在哪里了,感谢你指出。 - gamer
2个回答

8
如果您需要更旧的数据,可能需要使用 __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(),以确保时区信息正确。


即使我输入了2,也没有返回任何非零值。所有数据应该按照我的数据库条目显示,但是什么都没有出现。 - gamer
你问题中的所有时间戳都是昨天或今天的。你有更多的数据没有展示给我们吗?实际上是十天前的吗? - John Gordon
问题中显示的最早时间戳是昨天晚上9:30。那个时间戳还不到一天。 - John Gordon
1
@gamer,你是指lt还是gt - new QOpenGLWidget
@zixuan using lt. - gamer
显示剩余6条评论

2
这只是一个错误。尝试使用timestamp__lt来获取更旧的结果,timestamp__gt记录更新的结果。我建议你尝试用gt1分钟,这应该会显示整个数据库,因为所有数据都比1分钟旧。此外,Django推荐使用timezone.now()而不是datetime.now()。所以你犯了一个错误,timestamp__lt返回10天内的所有帖子是因为它们都小于10天。但是lt在1分钟内没有返回任何数据,因为所有数据都超过了1分钟。

那么根据我的逻辑,我只会得到那些10天前的餐厅数据,甚至不到9天23小时?我是对的吗? - gamer
1
是的。9天23小时不算10天。 - new QOpenGLWidget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接