63

フィールドを ForeignKey から ManyToManyField に変更したい Django アプリケーションがあります。古いデータを保存したい。これを行うための最も簡単で最適なプロセスは何ですか? 問題があれば、データベースのバックエンドとして sqlite3 を使用します。

問題の要約が明確でない場合は、ここに例を示します。2 つのモデルがあるとします。

class Author(models.Model):  
    author = models.CharField(max_length=100) 

class Book(models.Model):  
    author = models.ForeignKey(Author)  
    title = models.CharField(max_length=100)

データベースに大量のデータがあるとします。ここで、Book モデルを次のように変更します。

class Book(models.Model):  
    author = models.ManyToManyField(Author)  
    title = models.CharField(max_length=100) 

以前のデータをすべて「失い」たくありません。

これを達成するための最良/最も簡単な方法は何ですか?

ケン

4

2 に答える 2

1

おそらく、あなたがすべき最善かつ最も簡単なことは次のとおりです。

言う別の名前で多対多フィールドを作成します

authors = models.ManyToManyField(Author)

外部キー値を M2M 値に変換する小さな関数を作成します。

def convert():
    books = Book.objects.all()
    for book in books:
        if book.author:
            li = [book.author.id]
            book.authors.append(li)
            book.save()

実行したら、テーブルから作成者フィールドを削除して、移行を再度実行できます。

于 2016-09-06T11:51:58.013 に答える