Come faccio a migrare i dati da un modello all'altro utilizzando Sud nel Django?
-
13-09-2019 - |
Domanda
Ho creato un'applicazione Django che aveva un proprio sistema di voto interno e un modello chiamato Vota per seguirlo. Voglio refactoring del sistema di voto nella propria applicazione in modo da poter riutilizzare. Tuttavia, l'applicazione originale è in produzione e ho bisogno di creare una migrazione dei dati, che avrà tutti i voti e trapiantarle in app separata.
Come posso ottenere due applicazioni per partecipare a una migrazione in modo da avere accesso ad entrambi i loro modelli? Purtroppo, le applicazioni originali e separati hanno entrambi un modello di nome Vota adesso, quindi ho bisogno di essere a conoscenza di eventuali conflitti.
Soluzione
Hai provato db.rename_table ?
Vorrei iniziare con la creazione di una migrazione in uno nuovo o vecchio app che sembra qualcosa di simile.
class Migration:
def forwards(self, orm):
db.rename_table('old_vote', 'new_vote')
def backwards(self, orm):
db.rename_table('new_vote', 'old_vote')
Se questo non funziona è possibile migrare ogni elemento in un ciclo con qualcosa in queste righe:
def forwards(self, orm):
for old in orm['old.vote'].objects.all():
# create a new.Vote with old's data
models = {
'old.vote' = { ... },
'new.vote' = { ... },
}
Nota: è necessario utilizzare orm[...]
per accedere a qualsiasi modelli fuori della app in fase di migrazione. In caso contrario, la notazione orm.Vote.objects.all()
standard funziona.