2015-12-10 1 views
3

Портирование мое приложение Джанго 1.9, я получил страшный django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yetDjango 1.9: Следует ли мне избегать импорта моделей во время `django.setup()`?

В основном мой StackTrace является:

manage.py 
    execute_from_command_line(sys.argv) 
    django/core/management:352, in execute_from_command_line 
    utility.execute() 
    django/core/management/__init__.py:326, in execute 
    django.setup() 
    django/__init__.py:18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    django/apps/registry.py:85, in populate 
    app_config = AppConfig.create(entry) 
    django/apps/config.py:90, in create 
    module = import_module(entry) 
    python2.7/importlib/__init__.py:37, in import_module 
    __import__(name) 
    myapp/mylib/__init__.py:52, in <module> 
    from django.contrib.contenttypes.models import ContentType #<= The important part 
    django/contrib/contenttypes/models.py:159, in <module> 
    class ContentType(models.Model): 
    django/db/models/base.py:94, in __new__ 
    app_config = apps.get_containing_app_config(module) 
    django/apps/registry.p:239, in get_containing_app_config 
    self.check_apps_ready() 
    django/apps/registry.py:124, in check_apps_ready 
    raise AppRegistryNotReady("Apps aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 

Мой главный вопрос здесь:

Должен ли я импортировать мои модели в __init__.py моего Приложения django?

Кажется, что запускает метакласс класса django.models.ModelBase, который проверяет, готово ли приложение перед созданием модели.

ответ

13

Должен ли я импортировать свои модели в __init__.py из моих приложений django?

Нет, вы должны не импортировать любую модель в __init__.py файл любого установленного приложения. Это невозможно в 1.9.

От release notes:

Все модели должны быть определены внутри установленной программы или объявить явную app_label. Кроме того, невозможно импортировать их до их загрузки. В частности, он не может импортировать модели внутри корневого пакета приложения .