Django AppConfig :: ready не может использовать модуль, который импортирует модели - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу запустить функцию инициализации при загрузке моего приложения django, используя метод AppConfig :: ready.

Тем не менее, функциональность, которую я хочу запустить, должна использовать модели django, и вы не можете импортировать этот модуль в тот момент, когда импортируется apps.py, потому что модели в настоящее время загружены не полностью.

Как мне обойти это ограничение?

from django.apps import AppConfig
from . import populate_db
from . import server_settings


class ServerConfig(AppConfig):
    name = 'server'

    def ready(self):
        populate_db.populate_db(server_settings.opt.data_root)

выдает там ошибки:

File "/home/ian/dev/obd/django_site/server/apps.py", line 2, in <module>
    from . import populate_db
  File "/home/ian/dev/obd/django_site/server/populate_db.py", line 16, in <module>
    import server.models as models
  File "/home/ian/dev/obd/django_site/server/models.py", line 6, in <module>
    class Scan(models.Model):
  File "/home/ian/.local/lib/python3.6/site-packages/django/db/models/base.py", line 87, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/ian/.local/lib/python3.6/site-packages/django/apps/registry.py", line 249, in get_containing_app_config
    self.check_apps_ready()
  File "/home/ian/.local/lib/python3.6/site-packages/django/apps/registry.py", line 132, in check_apps_ready
    raise AppfunctionRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

1 Ответ

1 голос
/ 30 апреля 2019

Попробуйте выполнить импорт внутри готового метода, что-то вроде:

class ServerConfig(AppConfig):
    name = 'server'
    def ready(self):
        from . import populate_db
        from . import server_settings
        populate_db.populate_db(server_settings.opt.data_root)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...