Где в Django можно запустить код запуска, который требует моделей? - PullRequest
0 голосов
/ 05 января 2019

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

0 голосов
/ 05 января 2019

Проблема в том, что вы импортируете .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):
        <b>from .models import KnowledgeBase</b>
        to_load = KnowledgeBase.objects.order_by('-timestamp').first()
        # Here should go the file loading code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...