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

そのため、データベース レベルのカスタマイズが含まれているものはありません。

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

必要最小限のアプリを再作成してこれらのインポートを機能させることはできますが、理想的には、South にこれらの問題を解決するメカニズムがあるかどうかを知りたいですか? または、ベストプラクティスはありますか?コードベースに手を加えずにマイグレーションを変更するだけで、これらの問題を解決できれば素晴らしいと思います。

(Django 1.3、南 0.7.3)

4

2 に答える 2

2

South は、その後の移行で削除されたフィールドの参照を保持しません。カスタマイズされたフィールドを削除し、移行を正常に生成した場合、ImportErrorおそらく、それらのカスタマイズされたフィールドが、削除された移行の前に元に戻された移行によって参照されていることが原因であると考えられます。そう

  1. パッケージの削除と削除の移行を行う直前に、コード ベースをバージョンに更新します。
  2. 移行する
  3. コードベースを削除移行に更新して移行する
于 2012-04-07T05:38:37.367 に答える
1

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

于 2012-04-07T17:25:09.253 に答える