我正在使用 Django 及其开箱即用的 ORM。如果有一些模块级变量,它们是否仅在应用程序启动时评估?或者,如果在视图中修改了每个请求,它们是否也会对其进行评估?一个例子:
from news.models import News
# Module level variables
draft_news = News.objects.filter(status='draft')
live_news = News.objects.filter(status='prod')
def view(request):
# outputs 10 an 10, respectively.
print 'There are %d news objects and %d live objects. Adding a draft article' % (draft_news.count(), live_news.count())
n = News(
content='This is test content',
status='draft',
slug='this-is-a-test3',
pubdatetime=datetime.now(),
)
n.save()
print '...done. There are %d draft news objects.' % draft_news.count() # 11 objects
print 'Changing status to live...'
n.status='prod'
n.save()
print 'There are now %d live objects.' % live_news.count() # 11 objects
由于查询集是惰性的,它们是在模块级别还是视图级别有关系吗?我最初在管理命令中测试了上述代码。
让我们假设重构不是一种选择。
附加信息:我有几个应用服务器 (uWSGI) 共享同一个数据库。似乎模块级变量只有在我重新启动所有这些 uWSGI 进程时才会更改。换句话说,新的 News 对象在视图中使用 get_object_or_404 时返回 404。