Mehrere gleichzeitig laden

8

Gibt es trotzdem ein Gerät zu laden und mehrere Geräte laden?

Ich würde am liebsten tippen:

%Vor%

Und laden Sie alle Daten, anstatt alles eingeben zu müssen. Ist das möglich?

    
silent1mezzo 08.02.2010, 21:39
quelle

8 Antworten

15

Die Verwendung von $ python manage.py loaddata myfixtures/*.json würde funktionieren, da Bash den Platzhalter zu einer Liste passender Dateinamen ersetzt.

    
speakman 09.02.2010, 12:50
quelle
8

Warum nicht ein Makefile erstellen, das all deine Fixtures anzieht? zB so etwas wie:

%Vor%

Und dann an der Shell-Eingabeaufforderung

ausführen %Vor%

(Diese Vorgehensweise eignet sich auch, um Komponententests nur für bestimmte Apps auszuführen und andere zu ignorieren, falls erforderlich)

    
Steve Jalim 09.02.2010 14:38
quelle
6

Ich habe mehrere Apps im Projektverzeichnis und habe jede App mit dem Verzeichnis 'fixtures'. Mit einigen Bashs kann ich also:

python3 manage.py loaddata */fixtures/*.json

Und das erweitert alle JSON-Dateien im Fixtures-Verzeichnis jeder App in meinem Projekt. Sie können es einfach testen:

ls */fixtures/*.json

    
mimoralea 14.05.2015 13:39
quelle
3

Dieser Thread zeigt unter den ersten Ergebnissen mit einer Google-Suche "Daten von allen Fixtures laden" an und erwähnt nicht, was IMO die richtige Lösung dafür ist, dh die Lösung, mit der Sie beliebige Fixtures laden können ohne irgendwelche Wildcard-Tricks oder eine einzige Änderung der Datei settings.py (das habe ich auch so gemacht)

Mach einfach die Inventarlisten deiner Apps flach (und nicht das übliche Django-Schema, das zum Beispiel app_name / templates / app_name / mytemplate.html heißt), dh app_name / fixtures / myfixture. [json, yaml, xml]

Hier ist, was django doc sagt:

  

Zum Beispiel:

%Vor%      

würde /fixtures/foo/bar/mydata.json für jede installierte Anwendung, / foo/bar/mydata.json für jedes Verzeichnis in FIXTURE_DIRS und den Literalpfad foo / bar / mydata.json suchen.

Was das bedeutet ist, dass, wenn Sie eine Fixtures / myfixture.json in all Ihren App-Verzeichnissen haben, Sie einfach

ausführen müssen %Vor%

um alle Fixtures zu laden, die sich dort in Ihrem Projekt befinden ... Und das war's! Sie können sogar festlegen, mit welchen Apps Sie Geräte laden, indem Sie --app oder --exclude Argumente verwenden.

Ich werde erwähnen, dass ich meine Fixtures nur dazu nutze, meine Datenbank zu füllen, während ich etwas Entwicklung mache, also macht es mir nichts aus, eine flache Struktur in meinen "Fixtures" -Verzeichnissen zu haben ... Aber selbst wenn du deine Fixtures dazu verwendest scheint wie eine flache Struktur zu haben ist der Django-esque Weg zu gehen, und als   diese Antwort schlägt vor, dass Sie das Gerät aus einer bestimmten App referenzieren, indem Sie einfach etwas schreiben wie:

%Vor%     
theenglishway 16.10.2017 09:06
quelle
2

Wenn Sie wollen, dass dies unter Linux und Windows funktioniert, können Sie dies einfach zum Laden aller Ihrer json-Fixtures verwenden:

%Vor%     
DireWolf 25.02.2012 10:36
quelle
0

Manage.py Ladedaten wird aussehen Wenn Sie Ihre Fixtures in jeder App gleich benennen oder alle Fixtures in denselben Ordner legen, kann es einfach sein, alle Fixtures zu laden. Wenn Sie viele verschiedene Fixtures haben und ein komplexeres Benennungsschema benötigen, können Sie einfach alle Ihre Fixtures mit find mit -exec

laden

finden. -name "* .json" -exec manage.py Ladedaten {} \;

Wie ich in diesem [question][2] sage, habe ich das auch in einer fabdatei. EDIT: Verwenden Sie Python manage.py, wenn sich manage.py nicht in Ihrem VE-Pfad befindet.

    
ashwoods 31.05.2011 11:07
quelle
0

Mein Befehl ist das, einfach. (Django 1.6)

%Vor%     
NHK 20.06.2014 09:48
quelle
0

Nachdem ich ein wenig gesucht hatte, schrieb ich dieses Skript. Es durchsucht alle Verzeichnisse mit dem Namen "fixtures" nach .json-Dateien und führt eine "python manage.py loaddata {fixture_name} .json" aus. Manchmal wird die Reihenfolge für Fremdschlüsseleinschränkungen festgelegt, sodass eine Fixture in der Warteschlange verbleibt, wenn die Einschränkung nicht aufgelöst werden kann.

(Hinweis: Es erfordert das pip-Paket simple_terminal, das ich geschrieben habe. Und ich habe es so eingerichtet, dass es von 'python manage.py runscript' ausgeführt wird, das django-Erweiterungen benötigt.)

%Vor%     
Sean Chon 16.11.2017 19:29
quelle

Tags und Links