代码之家  ›  专栏  ›  技术社区  ›  Soviut

如何在Django中使用South将数据从一个模型迁移到另一个模型?

  •  4
  • Soviut  · 技术社区  · 16 年前

    我创建了一个Django应用程序,它有自己的内部投票系统和一个名为“投票跟踪”的模型。我想把投票系统重构成它自己的应用程序,这样我就可以重用它了。但是,原始的应用程序正在生产中,我需要创建一个数据迁移,它将获得所有投票权,并将它们移植到单独的应用程序中。

    如何让两个应用程序参与迁移,以便我可以访问它们的两个模型?不幸的是,最初的和单独的应用程序都有一个名为“投票”的模型,所以我需要注意任何冲突。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Soviut    16 年前

    你试过了吗? db.rename_table ?

    我首先要在看起来像这样的新应用程序或旧应用程序中创建一个迁移。

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

    如果这不起作用,您可以在循环中沿着这些行迁移每个项:

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

    注意:必须使用 orm[...] 访问当前正在迁移的应用程序以外的任何模型。否则,标准 orm.Vote.objects.all() 符号作品。