移行では、通常のように実際のモデルをインポートするのではなく、履歴モデルにアクセスする必要があります。
これは、あなたが抱えている問題に陥らないようにするために行われます。過去のモデル (つまり、そのような移行を作成したときに存在していたモデル) を取得するには、コードを置き換える必要があります。
公式のdjangoドキュメントからこれを確認してください(このケースはデータ移行用ですが、概念はケースに適用されます):
# -*- coding: utf-8 -*-
from django.db import models, migrations
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
この移行は Python コードを実行し、特定のモデルが必要です。もう存在しないモデルをインポートすることを避けるために、直接インポートするのではなく、「その正確なタイム スライス」でモデルへの「集約された」アクセスを行います。このコード:
apps.get_model("yourappname", "Person")
次の正確な置き換えになります。
from yourappname.models import Person
後者は、移行を実行する必要がある真新しいインストールでは失敗するためです。
編集して、移行の完全なコードを投稿して、特定のケースでお手伝いできるかどうかを確認してください.