4

独自の内部投票システムとそれを追跡するための Vote というモデルを備えた Django アプリを作成しました。再利用できるように、投票システムを独自のアプリにリファクタリングしたいと考えています。ただし、元のアプリは運用中であり、すべての投票を取得して別のアプリに移植するデータ移行を作成する必要があります。

2 つのアプリを移行に参加させて、両方のモデルにアクセスできるようにするにはどうすればよいですか? 残念ながら、元のアプリと別のアプリの両方に現在 Vote という名前のモデルがあるため、競合に注意する必要があります。

4

1 に答える 1

5

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()表記が機能します。

于 2009-12-07T18:57:00.080 に答える