2016-05-08 5 views
3

私は非常にユニークな問題に陥りました。私はモデルを作成しました。 'メッセージ'をしばらく使ってから、それをに変更しました2. 'メッセージ'をもう一度に変更しました3. 'メッセージ'モデルフィールドの変更。djangoの移行ファイルを編集して、不一致の依存関係を編集する必要があります

私が後で知るように、モデルの名前を変更する際に、djangoの移行にはいくつかの問題があります。マイグレーションでは、いくつかの問題が発生しました。 3回目のメッセージの移行を実行している間は、すべての移行を正しい方法で実行しましたが、私は手作業で修正したいくつかの問題に直面しました。今では、他のモデルでの移行のために移行を実行したときに、この移行が依然としてメッセージの第2の移行に依存していることがわかりました。ただし、2回目の移行に依存していたフィールドは、3回目の移行で実際に作成されました。

トレースバック私は取得しています:

ValueError: Lookup failed for model referenced by field activities.Enquiry.message_fk: chat.Message 

とは:

Applying contacts.0002_mailsend...Traceback (most recent call last): 
    File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 163, in get_model 
    return self.models[model_name.lower()] 
KeyError: 'message' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/db/migrations/state.py", line 84, in render 
    model = self.apps.get_model(lookup_model[0], lookup_model[1]) 
    File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/registry.py", line 202, in get_model 
    return self.get_app_config(app_label).get_model(model_name.lower()) 
    File "/home/sp/webapps/myenv/lib/python3.4/site-packages/django/apps/config.py", line 166, in get_model 
    "App '%s' doesn't have a '%s' model." % (self.label, model_name)) 
LookupError: App 'chat' doesn't have a 'message' model. 

何私がお聞きしたいのは、私は手動への移行2からそれを変更するには、移行ファイルに依存関係を編集する必要があるかどうかでありますメッセージの移行3。

PS:ジャンゴ1.7.2

答えて

3

通常、手動で編集しないでください。

これらの編集を開始すると、循環的な依存関係の問題が発生します。変更内容を覚えていないと、移行全体がめちゃくちゃになります。

紛失するデータがない場合は、移行を元に戻すことができます。移行を削除する場合は、移行テーブルに移行が存在しないことを示すエントリが残っていないことを確認するだけです。 (複雑になる可能性があるため、手動で移行を削除しないことをお勧めします)。

移行ファイルを分析して、どの位置に問題が発生しているかを明確に把握している場合は、移行ファイルしかし、あなたがそれを処理できるようになるまで、それをしないでください。

名前が変更されているため問題が発生している可能性があります。手動で修正した問題が発生した場合は、そのプロセスが間に合っている可能性がありますいくつかのprobleを作成しました。依存関係を変更して作成を実行できます。循環する依存関係がある場合は、直接依存します。変更を元に戻す必要があります。そうでなければ、もう少し分析を行い、さらにいくつかのファイルを編集してサイクリック依存関係の問題を取り除いてください。 (バックアップをとってください)運が良かったり、移行を深く理解していれば、成功する可能性があります。

1

を使用すると、いいえ、私はそうは思わない、あなたは最後に成功した移行後に移行ファイルを削除して、もう一度それを実行したほうが良いです。

0

異なる企業の移行管理プロセスを経て、自分が何をしているのかを知っていれば、移行を編集することもできます。実際には、多くの場合、既存の移行ファイルを編集したり、特定の変更を実装するためだけに新しいファイルを作成する必要があります。ここで注意する必要がある点はありません。

  1. 実行される操作の順序を理解して維持します。
  2. テストそれをステージングと生産
にプッシュする前に、依存関係の点に注意してください。
関連する問題