2012-03-30 8 views
4

Ich verwende die in this question beschriebene Methode, um Benutzer für mein Django-Projekt zu laden.Django lädt Benutzer mit inital_data.json

Das spart Benutzerberechtigungen, wo eine Erlaubnis Rekord könnte wie folgt aussehen:

{ 
"pk": 56, 
"model": "auth.permission", 
"fields": { 
    "codename": "change_somemodel", 
    "name": "Can change some model", 
    "content_type": 19 
} 

und einen Benutzerdatensatz:

{ 
"pk": 2, 
"model": "auth.user", 
"fields": { 
    "username": "some_user", 
    "first_name": "", 
    "last_name": "", 
    "is_active": true, 
    "is_superuser": false, 
    "is_staff": true, 
    "last_login": "2011-09-20 06:36:54", 
    "groups": [], 
    "user_permissions": [ 
    10, 
    11, 
    19, 
    20, 
    21, 
    1, 
    2, 
    56, 
    ..., 
    ], 
    "password": "sha1$e4f29$fcec7f8bb930d98abdaaa3c0020220f413c4c1f5", 
    "email": "", 
    "date_joined": "2011-03-15 06:01:41" 
} 

Gibt es Potenzial für den Inhaltstyp Fremdschlüssel auf sich ändern eine zukünftige Installation? Wie wäre es, wenn Models oder Apps hinzugefügt werden? Angenommen, ich füge ein Modell zu meiner Core-App hinzu, dann habe ich einige wiederverwendbare Apps, die in settings.py aufgeführt sind, haben diese bei einer neuen Installation eine andere content_type_id? Kann ich die Tabelle "content_type" in meine ursprünglichen Daten aufnehmen, oder verursacht das wahrscheinlich andere Probleme?

Wenn dies keine zuverlässige Methode zum Laden mehrerer anfänglicher Benutzer in die Datenbank ist, welche Alternativen gibt es?

Antwort

7

Überprüfen Sie Natural Keys . Verwenden Sie -n w/dumpdata wie ./manage.py dumpdata -n auth.User

+0

Danke für den Zeiger. Ich war mir der natürlichen Schlüssel nicht bewusst. In diesem Fall scheint es jedoch nicht zu funktionieren. Ich habe dumpdata verwendet, um nur Daten von der "auth" -App zu erhalten, und ich erhalte diesen Fehler bei syncdb: IntegrityError: Spalten content_type_id, Codename sind nicht eindeutig. – AgDude

+0

Ich habe dieses Problem gelöst. Danke, ok. Ich habe deine Anweisungen beim ersten Mal nicht genau genug befolgt und versucht, Berechtigungen sowie Benutzer von einem Gerät zu laden. – AgDude

7

In der Praxis kann es sein, dass Sie auch contenttypes ausschließen müssen, um das zu funktionieren. Wenn Sie Benutzer- oder Gruppendaten haben, müssen Sie diese ebenfalls ablegen. Weitere Informationen zum Ausschließen von Inhaltstypen finden Sie unter thread.

Für meine App musste ich den folgenden Befehl für loaddata oder test verwenden, um mit den von manage.py dumpdata erzeugten Scheinwerfern zu arbeiten. Darüber hinaus sollten Sie --indent N Option verwenden, um sicherzustellen, dass Sie eine lesbare Datei erhalten (0 ist die Anzahl der Leerzeichen für Einzug)

./manage.py dumpdata -n --indent 4 -e contenttypes appName auth.Group auth.User > initial_data.json 
Verwandte Themen