代码之家  ›  专栏  ›  技术社区  ›  Serge Rogatch

在Django中的哪里可以运行需要模型的启动代码?

  •  2
  • Serge Rogatch  · 技术社区  · 7 年前

    在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中是否有一个地方可以在模型初始化后运行一些启动代码呢?

    1 回复  |  直到 7 年前
        1
  •  15
  •   willeM_ Van Onsem    7 年前

    问题是您需要导入 .models 在文件的顶部。这意味着,当文件 app.py 文件加载后,Python将加载 models.py 当它求值该行时,将创建文件。但那是 早期的你应该让Django正确加载。

    可以在中移动导入 def ready(self) 方法,以便 文件是在 ready() 由Django框架调用,如:

    from django.apps import AppConfig
    
    class Pqawv1Config(AppConfig):
        name = 'pqawV1'
    
        def ready(self):
            from .models import KnowledgeBase
            to_load = KnowledgeBase.objects.order_by('-timestamp').first()
            # Here should go the file loading code