Ошибка выполнения: реестр приложения еще не готов
Я пытаюсь создать скрипт, который заполняет базу данных тестовыми пользователями. Я новичок в 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', 'lolcats@gmail.com', 'e')
cat = User.objects.create_user( 'steve', 'l2olcats@gmail.com', 'e')
dog = User.objects.create_user( 'aasd', 'lo3lcats@gmail.com', 'ad')
cow = User.objects.create_user( 'sadsfa', 'lol4cats@gmail.com', 't' )
pig = User.objects.create_user( 'regibald', 'lolc5ats@gmail.com', '0')
donkey = User.objects.create_user( 'turnip', 'lolca6ts@gmail.com', 'pop')
human = User.objects.create_user( 'tutu', 'lolcat7s@gmail.com', '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
или что-то?
3 ответа
[django 1.7] Автономный скрипт, который вы хотите запустить, импортируйте django и настройки, как показано ниже
import os
import django
[...]
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
Это известное и предполагаемое поведение в соответствии с примечаниями к выпуску Django 1.7 в разделе "последовательность запуска":
Другой распространенный преступник - django.contrib.auth.get_user_model(). Используйте параметр AUTH_USER_MODEL для ссылки на модель пользователя во время импорта.
и это должно сработать
для справки: https://docs.djangoproject.com/en/dev/releases/1.7/
Я узнал, что если я бегу заселять через manage.py
оболочка с execfile()
Команда, тогда она работает правильно. Все, что нужно было настроить, прежде чем я начну изменять базу данных или запускать внешний код. Спасибо Ланццу за подсказку.