Prima di Django 1.7 che ho usato per definire una fixtures
directory per-progetto nelle impostazioni:Come creare per ogni singolo progetto initial_data infissi in Django 1.7+
FIXTURE_DIRS = ('myproject/fixtures',)
e l'uso che per mettere la mia initial_data.json
apparecchio memorizzare il default gruppi essenziali per l'intero progetto. Questo ha funzionato bene per me, poiché ho potuto mantenere pulito il progetto separando i dati per progetto dai dati specifici delle app.
Ora con gli apparecchi Django 1.7, initial_data
sono stati ritirati, suggesting per includere data migrations insieme alle migrazioni di schema dell'app; non lasciando una scelta ovvia per i dati iniziali globali per progetto.
Inoltre il nuovo migrations framework installa tutti i precedenti apparecchi di dati iniziali prima migrazioni esecuzione per le applicazioni compatibili (compresa la django.contrib.auth
app). Questo comportamento fa sì che il mio dispositivo contenente i gruppi predefiniti su fallisca l'installazione, poiché la tabella auth_group
non è ancora presente nel DB.
Qualche suggerimento su come (elegantemente) far funzionare gli apparecchi dopo tutte le migrazioni, o almeno dopo le migrazioni delle app di autenticazione? O altre idee per risolvere questo problema? Trovo gli apparecchi un ottimo modo per fornire dati iniziali e vorrei avere un modo semplice e pulito per dichiararli per l'installazione automatica. Il nuovo RunPython è troppo macchinoso e lo considero un eccessivo per la maggior parte degli scopi; e sembra essere disponibile solo per le migrazioni per app.
Dato che è deprecato, probabilmente sarà un po 'imbarazzante. Un'opzione potrebbe essere quella di creare un'app minima per caricare solo i dati iniziali, creare una migrazione e, in RunPython, chiamare le funzioni che Django utilizza per caricare i dispositivi. In questo modo puoi anche specificare le dipendenze nella tua migrazione. Tuttavia, probabilmente richiederebbe qualche serio scavo nel codice sorgente di Django. –
Sì, ho pensato di creare una sorta di * meta * application come ultima risorsa e di creare le migrazioni lì (ma è ancora brutto). Mi chiedo perché il nuovo Django non fornisca almeno un modo standard di ** dichiarativamente ** specificando i dispositivi da caricare insieme alle nuove Migrazioni. –
Da qualche parte su SO è stato suggerito di riutilizzare i file di dispositivi json/xml precedenti alla 1.7. Avresti un'app minima con una semplice migrazione dei dati, quindi analizzerai i tuoi dispositivi json/xml esistenti e creerai record da essi. Questo dovrebbe essere quello che è successo pre-1.7 comunque. –