So erstellen Sie projektspezifische initial_data-Fixtures in Django 1.7+

8

Vor Django 1.7 habe ich in den Einstellungen ein pro-project fixtures -Verzeichnis definiert:

%Vor%

und verwende das, um mein initial_data.json Fixture zu speichern, das die Standard Gruppen speichert, die für das gesamte Projekt notwendig sind. Dies hat für mich gut funktioniert, da ich das Design sauber halten konnte, indem ich projektspezifische Daten von anwendungsspezifischen Daten trennte.

Jetzt mit Django 1.7 sind initial_data Fixtures veraltet, vorschlagen , Datenmigrationen zusammen mit den Migrationen der App-Schemata zu integrieren ; keine offensichtliche Wahl für globale initiale Daten pro Projekt lassen.

Außerdem werden im neuen Migrationsframework alle Legacy-Anfangsdatenträger vor Ausführen von Migrationen für die kompatiblen Apps (einschließlich der App django.contrib.auth ). Dieses Verhalten führt dazu, dass mein Fixture, das Standardgruppen enthält, die Installation fehlschlägt , da die Tabelle auth_group noch nicht in der DB vorhanden ist.

Irgendwelche Vorschläge, wie Fixtures (elegant) nach allen Migrationen oder zumindest nach der Migration der Auth-App ausgeführt werden? Oder irgendwelche anderen Ideen, um dieses Problem zu lösen? Ich finde Fixtures eine großartige Möglichkeit, um erste Daten zu liefern und möchte sie auf einfache und saubere Weise für die automatische Installation deklarieren. Das neue RunPython ist einfach zu umständlich und ich halte es für die meisten Zwecke für einen Overkill. und es scheint nur für pro-App-Migrationen verfügbar zu sein.

    
Jozef Knaperek 13.09.2014, 15:00
quelle

2 Antworten

4

Wenn Sie unbedingt Fixtures verwenden möchten, verwenden Sie einfach RunPython und call_command in Ihren Datenmigrationen.

%Vor%

Es wird jedoch empfohlen, Daten mit Python-Code und Django ORM zu laden, da Sie keine Integritätsprobleme haben müssen.

Quelle .

    
Antwan 14.11.2014, 12:09
quelle
1

Ich empfehle die Verwendung von Fabriken anstelle von Vorrichtungen, sie sind ein Chaos und schwer zu pflegen, besser, FactoryBoy mit Django zu verwenden.

    
codeadict 23.10.2014 16:12
quelle