/ / Django - Distribuisci syncdb e Sud - Django, distribuzione, Django-Sud

Django - Distribuisci syncdb e sud - django, distribuzione, django-sud

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 № 1

In 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"