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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top