私はかなり独特の要件があります。アプリケーションは、独自の稼働時間を合計時間として表示できる必要があります。つまり、私はリクエスト・レスポンス・サイクルから離れ、関連するモデルの現在のタイムスタンプを更新する必要があります。サーバの初期化時にモデル操作を実行します。
これを念頭に置いて、私はready()
メソッドのコードをapps.py
に入れてhereの指示に従っています。問題は、もちろん、私はApps aren't loaded yet
エラーに遭遇したことです。これを回避するにはどうしたらいいですか?
もう1つのアプローチは、モデルを削除してファイルにタイムスタンプを書き込むことですが、これはスケーリングしない脆弱な方法です。ブート時に広範なリレーショナル情報を保存したい場合はどうすればよいですか?
誰かが何か提案できますか?次のように
======= UPDATE =========
私が使用しているコードは(私のプロジェクトが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
ファイル:私は./manage.py runserver
を実行したときに
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()
そして、ここでは、完全なスタックトレースですが、 :
(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.
'準備が'メソッドを*と呼ばれます。 "Appsがまだロードされていません"というメッセージが表示されたら、 'ready()'メソッドの外で何か間違ったことをしています。コードと関連するスタックトレースを送信します。 – solarissmoke
@solarissmoke質問に追加されました。助けてください! – dotslash