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?
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)
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
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%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
ladenfinden. -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.
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%Tags und Links django django-fixtures