Sto implementando un progetto su un nuovo ambiente di sviluppo.
Mentre utilizzo South ho fatto:
$ python manage.py syncdb --all
$ python manage.py migrate --fake
ero solito syncdb --all
applicare lo stato attuale dei modelli.
Poi migrate --fake
per contrassegnare tutti i modelli come migrati.
Ma dopo ciò, il mio modello non è nell'ultima versione (campi mancanti)
Che cosa sto facendo di sbagliato ?
Presumo che tutte le mie modifiche abbiano migrazioni.
Se lo faccio
$ python manage.py syncdb
Sembra creare il primo stato da quando ho usato il Sud (che è previsto)
Ma allora
$ python manage.py migrate
Alcune tabelle appaiono come già create
risposte:
2 per risposta № 1In realtà questo, avrebbe dovuto andare bene per il mio caso
$ python manage.py syncdb --all
$ python manage.py migrate --fake
Dovendo ridistribuire la mia app di recente, ho riscontrato lo stesso problema.
Ho appena realizzato di avere una doppia migrazione iniziale sul modello che stava causando il problema
0001_initial.py
0002_initial.py
0003_auto__add_field_mytable_myfield.py
Ho semplicemente cancellato e rinominato
0001_initial.py
0002_auto__add_field_mytable_myfield.py
Quindi rifatta l'intera distribuzione del database (ovviamente senza dimenticare di aggiornare le migrazioni già applicate sugli altri miei host)
1 per risposta № 2
--fake
L'opzione non evita errori durante il tentativo di creare nuove migrazioni. Registra che le migrazioni sono state applicate senza effettivamente applicarli.
Inoltre, è necessario --ignore-ghost-migrations
o --delete-ghost-migrations
per ottenere ciò che stai cercando.
Per convertire un progetto esistente in south
, devi prima farlo converti l'app
Ora, se hai già corso --fake
, per recuperare, puoi farlo:
- Vai a
./manage.py dbshell
- ELIMINA DA south_migrationhistory DOVE id> 0; // Nota che questo eliminerebbe qualunque cosa sul tavolo.
Se desideri rimuovere le migrazioni di un'app specifica,
DELETE FROM south_migrationhistory WHERE app_name = "blah"