Где в Django можно запустить код запуска, который требует моделей?

При запуске 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 ответ

Решение

Проблема в том, что вы импортируете .models в верхней части вашего файла. Это означает, что когда файл app.py файл загружен, Python загрузит models.py файл, когда он оценивает эту строку. Но это слишком рано. Вы должны позволить Django правильно выполнить загрузку.

Вы можете переместить импорт в def ready(self) метод, такой, что models.py файл импортируется при 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
Другие вопросы по тегам