我有一个看起来像这样的模型:
class Item(models.Model):
...
publish_date = models.DateTimeField(default=datetime.datetime.now)
...
还有一个看起来像这样的经理:
from datetime import datetime
class ItemManager(Manager):
def published(self):
return self.get_query_set().filter(publish_date__lte=datetime.now()
和一个看起来像这样的视图:
class ItemArchive(ArchiveIndexView):
queryset = Item.objects.published()
date_field = 'publish_date'
我的想法是我可以打电话Item.objects.published()
并获取所有已发布的查询集Items
.
问题是 Django 似乎正在执行datetime.now()
服务器启动时调用管理器,然后缓存该值。因此,如果今天是 5 月 24 日,我创建了一个Item
发布日期为 5 月 23 日,并于 5 月 22 日启动服务器,因此 5 月 23 日的项目不会出现在ItemArchive
看法。一旦我重新启动 Apache,5 月 23 日的项目就会正确显示在视图中。
如何强制 Django 执行datetime.now()
每次经理被叫到的时候?
我相信这是由你的观点定义造成的queryset = Item.objects.published()
作为类变量。当您的ItemArchive
类最初是导入的。您应该将该行移动到一个方法中,每次调用视图时都会执行该方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)