私は自分のデータベースのスキーマを大きく変更していますが、新しいスキーマに移行する過程でデータを失いたくはありません。具体的な例を挙げておきます。私は現在class Person(models.Model)
を持っていて、それぞれPerson
インスタンスには、name
,age
などのようなデータの束があります。データベースにはすでにPerson
のインスタンスがたくさんあります。実際にはPerson
、Student
、Teacher
という2つのタイプが必要であり、これらのタイプにはそれぞれ固有の変数とメソッドが必要です。これを達成する最良の方法は、Person
を抽象クラスにして、Student
とTeacher
をそのクラスに拡張することです。 Person
の変数の一部は現在Student
にのみ適用されていますので、これらの変数をStudent
サブクラスに移動します。どのようにデータを失うことなくDjangoデータベーススキーマを完全に変更できますか?
通常、データを失うことなくこの移行を実行するにはどうすればよいですか?私はDjangoをかなり新しくしているので、どこから始めるべきか分からないので、おそらくpython manage.py
で実行するカスタムスクリプトを書く必要があります。
また、選択肢とともにperson_typeフィールドを追加することもできます。 https://docs.djangoproject.com/en/1.11/ref/models/fields/#choices – iamkhush
このアプローチの問題点は、私がしたいことが本当にサブクラス化に役立つということです。なぜなら、「Student」と「Teacher」はそれぞれ独自の別々の変数とメソッドだけでなく、多くの共有変数も含んでいます。 「教師」がGPAを持つのは意味がありませんが、「学生」と「教師」の両方に姓があります。これは単なる一例です。 – Solomon
もしあなたがpostgresを使っているなら、hstorefieldを使っていくつかのレベルの柔軟性を調べることができます。 – iankit