2014-03-30 16 views
11

Ich versuche, ein Skript zu erstellen, das eine Datenbank mit Testbenutzern füllt. Ich bin neu in Django und Python. Ich erhalte immer:Laufzeitfehler: App-Registrierung ist noch nicht fertig

Runtime error: App registry isn't ready yet. 

Hier ist der Ausgang und Fehler ist:

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. 

Hier ist der Code:

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() 

Gibt es eine Möglichkeit, die Benutzerprofilerstellung zu zwingen, zu warten, für die Registry App mit einem signal oder etwas?

Antwort

14

[django 1.7] Der Standalone-Skript, das Sie ausführen möchten, importieren django und Einstellungen wie unter

import os 

import django 

[...] 


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

    django.setup() 
+0

https://docs.djangoproject.com/en/1.7/ref/applications /#django.setup –

4

Dies ist ein bekanntes und Verhalten bestimmt nach Djangos 1.7 Release Notes unter der "Startreihenfolge" -Klausel:

Another common culprit is django.contrib.auth.get_user_model(). Use the AUTH_USER_MODEL setting to reference the User model at import time.

und das sollte den Trick

Referenz tun: https://docs.djangoproject.com/en/dev/releases/1.7/#app-loading-changes

+0

Ich sehe nicht, 'django.contrib.auth.get_user_model' in dem obigen Code verwendet, und können Stellen Sie sich vor, wie alles in diesem Code die Einstellung "AUTH_USER_MODEL" verwenden könnte. Mir scheint das Problem mit [dem fehlenden 'django.setup()' Aufruf] (https://docs.djangoproject.com/en/dev/releases/1.7/#standalone-scripts) wahrscheinlicher zu sein. – lanzz

2

Ich fand heraus, dass, wenn ich durch die manage.py Shell mit dem execfile() Befehl bevölkern, dann läuft es richtig. Alles musste eingerichtet werden, bevor ich mit der Änderung der Datenbank oder der Ausführung von externem Code begann. Danke an lanzz für den Hinweis.

+0

Sie könnten dies zu einem Verwaltungsbefehl machen https://docs.djangoproject.com/en/1.7/howto/custom-management-commands/ – boatcoder

Verwandte Themen