【发布时间】:2023-03-16 05:34:01
【问题描述】:
我有一个相当特殊的要求:应用程序应该能够将自己的正常运行时间显示为总小时数。这意味着我需要摆脱请求-响应周期并更新相关模型中的当前时间戳。
考虑到这一点,我按照here 给出的说明,将代码放入我应用程序的ready() 方法apps.py 中。当然,问题是我遇到了Apps aren't loaded yet 错误。我该如何解决这个问题?
想到的另一种方法是取消模型并将时间戳写入文件,但这是一种无法扩展的脆弱方法。如果我想在启动时存储大量的关系信息怎么办?
有人可以推荐吗?
======= 更新 =========
我使用的代码如下(我的项目叫jremind,我的应用叫remind)。
这是我的模型实例:
class Monitor(models.Model):
# save automatically when object is saved()
app_init_timestamp = models.DateTimeField(null=False, auto_now=True)
应用程序的__init__ 文件:
default_app_config = 'remind.apps.RemindConfig'
应用程序的apps.py 文件:
from django.apps import AppConfig
from remind.models import Monitor
class RemindConfig(AppConfig):
name = 'remind'
def ready(self):
# There's only one instance
monitor = Monitor.objects.get()[0]
#Auto-update timestamp
monitor.save()
这是我运行 ./manage.py runserver 时的完整堆栈跟踪:
(env) jremind$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
July 13, 2016 - 15:12:08
Django version 1.9, using settings 'jremind.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^C(env) jremind$ ./manage.py runserver
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 176, in fetch_command
commands = get_commands()
File "/media/common/code/python/projects/jremind/env/lib/python3.4/functools.py", line 448, in wrapper
result = user_function(*args, **kwds)
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 71, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/apps/registry.py", line 137, in get_app_configs
self.check_apps_ready()
File "/media/common/code/python/projects/jremind/env/lib/python3.4/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
【问题讨论】:
-
ready()方法在 应用程序准备就绪后调用。如果您仍然收到“应用程序尚未加载”消息,那么您做错了,在ready()方法之外。发布代码和相关的堆栈跟踪。 -
@solarissmoke 在问题中添加。请帮忙!
标签: django django-1.9