カスタム移行が機能するはずです。
- すでにモデルAとBがあるので、2つのモデルから必要なフィールドを使用してモデルCを作成します。
- 通常のスキーマ移行を行います。例: manage.pymakemigrations...そして既存の変更を申請します
- カスタム移行を作成します。例: python manage.py makemigrations --empty yourappname(@2psが共有するリンクを参照
- 上記で生成されたファイルを編集します。以下にサンプルのデータ移行を追加しました。
- rum manage.pyは、上記の手順4からの移行を適用するために移行します。
-
必要に応じてモデルAとBを削除し、移行を生成して適用すれば、問題はありません。
...
def merge_models_ab(apps, schema_editor): A = apps.get_model("app_name", "A") B = apps.get_model("app_name", "B") C = apps.get_model("app_name", "C") #come up with some interesting ways to join A and B #iterate over join and insert into C #C.objects.create(...)
...
class Migrations(migrations.Migration): dependencies = [ ('app_name', 'some_prev_migrations'), ] operations = [ migrations.RunPython(merge_models_ab), ]