Ошибка выполнения: реестр приложений еще не готов

Я пытаюсь создать script, который заполняет базу данных тестовыми пользователями. Я новичок в Django и Python. Я продолжаю получать:

Runtime error: App registry isn't ready yet. 

Вот результат и ошибка:

starting population script
Traceback (most recent call last):
File "populate.py", line 32, in <module>
populate()
File "populate.py", line 22, in populate
i.save()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\db\models\base.py",    line 603, in save
force_update=force_update, update_fields=update_fields)
...
...
...    
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py", line   156, in get_models
self.check_ready()
File "c:\Python27\lib\site-packages\django-1.7a2-py2.7.egg\django\apps\registry.py",   line 119, in check_ready
raise RuntimeError("App registry isn't ready yet.")
RuntimeError: App registry isn't ready yet.

Вот код:

import os
import datetime

def populate():
    freer = User.objects.create_user( 'joyyie', '[email protected]', 'e')
    cat = User.objects.create_user( 'steve', '[email protected]', 'e')
    dog = User.objects.create_user( 'aasd', '[email protected]', 'ad')
    cow = User.objects.create_user( 'sadsfa', '[email protected]', 't' )
    pig = User.objects.create_user( 'regibald', '[email protected]', '0')
    donkey = User.objects.create_user( 'turnip', '[email protected]', 'pop')
    human = User.objects.create_user( 'tutu', '[email protected]', 'pa')
    a = [freer,cat,dog,cow,pig,donkey,human]

    for i in a:
        i.first_name= 'jackee'
        i.is_superuser=True
        i.is_staff=False
        i.date_joined=datetime.datetime.today()
        i.last_login=datetime.datetime.today()

        i.save()


if __name__=='__main__':
    print "starting population script"
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'infosmos.settings')
    from django.conf import settings
    from django.db import models
    from django.contrib.auth.models import User
    populate()

Есть ли способ заставить создание профиля пользователя ждать приложения реестра с помощью signal или чего-то еще?

Ответ 1

[django 1.7] Автономный script, который вы хотите запустить, импортировать django и настройки, как показано ниже

import os

import django

[...]


if __name__ == '__main__':  
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

    django.setup()

Ответ 2

Это известное и предполагаемое поведение в соответствии с примечаниями к выпуску Django 1.7 в разделе "последовательность запуска":

Другим распространенным преступником является django.contrib.auth.get_user_model(). Используйте параметр AUTH_USER_MODEL для ссылки на модель пользователя во время импорта.

и это должно сделать трюк

для справки: https://docs.djangoproject.com/en/dev/releases/1.7/#app-loading-changes

Ответ 3

Я узнал, что если я запустил заполнение через оболочку manage.py командой execfile(), тогда она работает правильно. Все, что нужно было настроить до того, как я начну изменять базу данных или запустить внешний код. Спасибо lanzz за подсказку.