Question

J'ai créé une application Django qui avait son propre système de vote interne et un modèle appelé Votez pour le suivre. Je veux revoir la conception du système de vote dans sa propre application pour que je puisse le réutiliser. Cependant, l'application d'origine est en production et je dois créer une migration de données qui prendra tous les crédits et les transplanter dans l'application séparée.

Comment puis-je obtenir deux applications pour participer à une migration afin que j'ai accès à la fois leurs modèles? Malheureusement, les applications originales et distinctes ont tous deux un modèle nommé Voter maintenant, donc je dois être conscient de tout conflit.

Était-ce utile?

La solution

Avez-vous essayé db.rename_table ?

Je commencerais par la création d'une migration soit ancienne ou la nouvelle application qui ressemble à quelque chose comme ça.

class Migration:

    def forwards(self, orm):
        db.rename_table('old_vote', 'new_vote')    

    def backwards(self, orm):
        db.rename_table('new_vote', 'old_vote')

Si cela ne fonctionne pas, vous pouvez migrer chaque élément dans une boucle avec quelque chose le long de ces lignes:

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' = { ... },
}

Note: Vous devez utiliser orm[...] pour accéder à tous les modèles en dehors de l'application actuellement en cours de migration. Dans le cas contraire, la notation standard orm.Vote.objects.all() fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top