【发布时间】:2019-06-01 00:31:04
【问题描述】:
在 Django 启动时,我需要运行一些需要访问数据库的代码。我更喜欢通过模型来做到这一点。
这是我目前在apps.py 中拥有的内容:
from django.apps import AppConfig
from .models import KnowledgeBase
class Pqawv1Config(AppConfig):
name = 'pqawV1'
def ready(self):
to_load = KnowledgeBase.objects.order_by('-timestamp').first()
# Here should go the file loading code
但是,这会产生以下异常:
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
那么在模型初始化之后,Django中有没有地方可以运行一些启动代码呢?
【问题讨论】:
-
将
from .models import KnowledgeBase移入def ready方法。这里在 header 中导入会导致模型加载过早。 -
@WillemVanOnsem,这行得通,谢谢。但是这个解决方案有多好?有什么副作用?我对 Python 很陌生...
-
不同的是,当配置调用
ready时,您只需导入.models,因此您推迟导入。正是由于“急切”的导入导致了麻烦。
标签: python django database django-models startup