2012-04-07 13 views
3

私は自分のプロジェクトからいくつかのカスタムフィールドを含むアプリケーションを削除しました。私がマイグレーションを実行しようとすると、当然ImportErrorが得られます。マイグレーションを実行するために削除されたカスタムフィールドをどうやって模擬しますか?

from django.db.models.fields import IntegerField 

class SomeField(IntegerField): 
    def get_internal_type(self): 
     return "SomeField" 

    def db_type(self, connectio=None): 
     return 'integer' 

    def clean(self, value): 
     # some custom cleanup 
     pass 

だから、それらのどれもが任意のデータベースレベルのカスタマイズを含まない:これらのフィールドは非常に基本的なカスタマイズ以下のようなものでした。

このコードを削除すると、移行が作成されて以降の移行がすべて正常に実行されました。しかし、削除前のデータベースでそれらを実行しようとすると、私は間違いを認識しました。

ベアボーンアプリを再作成してこれらのインポートを有効にできますが、理想的にはサウスがこれらの問題を解決する仕組みを持っているかどうかを知りたいのですが?または、ベストプラクティスがありますか?マイグレーションを変更してコードベースに触れさせないようにすれば、これらの問題を解決することができれば涼しいでしょう。

(ジャンゴ1.3、南0.7.3)

答えて

2

南は、その後の移行に削除されたフィールドの参照を保持していません。カスタマイズされたフィールドを削除して移行を正常に生成した場合、おそらくImportErrorは、これらのカスタマイズされたフィールドが、削除の移行前に一部の元に戻された移行によって引き続き参照されるためです。だから、

  1. 更新あなたは、包装除去および削除の移行を行う直前のバージョンにコードベースは
  2. は、削除移行に
  3. 更新コードベースを移行し、
+0

右。しかし、私はVCSの巻き戻しを伴わないオプションを探求したいと思っています。結局のところ、私はHEADを使ってデータベースをシードできるはずです。 – muhuk

+0

@muhuk私はそのようなことがあることを知らない。ただし、論理的には適切な限り移行を変更でき、本番DBのスキーマやテストDBの生成には適しています。たとえば、一部のフィールドを追加して削除するだけの最新の移行を削除したり、移行ファイル内のモデル行を変更して特定のフィールドを削除したりすることができます。慎重に行ってください。 – okm

1

このような単純なカスタムを移行しますadd_introspection_rules [1]が定義されている場合、South 0.7+でフィールドは非常に簡単です。 (カスタムフィールドクラスの後に同じモジュール内に)、移行が作成されたとき。その後、南はこれらのフィールドを「フリーズ」せず、簡単に取り除くことができます。その後、okmの前の回答が役に立たない場合は、古い移行の修正を再作成してください。

関連する問題