DB のテーブルをクリアしたかったので、テーブルを削除しました。通常、私はそれmanage.py syncdb
を再作成します。ただし、ここでの回答は、もう使用しないことを示していsyncdb
ます。それで、私は代わりに何をしますか?
5 に答える
これはかなり遅い応答ですが、同じ問題に遭遇する人向けです (私のように)。
通常、south によって管理されているアプリの db_tables を削除するには、次を使用する必要があります。
python manage.py migrate appname zero
しかし、それらをデータベースに手動でドロップした場合は、南に知らせてください
python manage.py migrate appname zero --fake
そしてもちろん、テーブルを再作成するために
python manage.py migrate appname
同じ問題がありました。これがすべての状況で機能するかどうかはわかりませんが、私が行ったことは次のとおりです。
- INSTALLED_APPSから「south」をコメントアウトします
- manage.pysyncdbを実行します
- INSTALLED_APPSの「south」のコメントを解除します
- manage.pymigrateを実行します
出来上がり!
あなたのマイレージは異なる場合があります....
うーん、この交換は私の質問そのものをカバーしています:
データベースを手動で変更しても、South は気付かないでしょう。データベースのバージョンを追跡する唯一の方法は、south_migrationhistory テーブルです。
私が最終的にやったのは、問題でドロップしたモデルをコメントアウトし、 を実行し、ドロップしたモデルschemamigration
の空の列のないテーブルを作成し (サウスにはドロップするものがあるため)、モデルのコメントを外しmigrate
、schemamigration
そしてmigrate
再び。テーブルを落とすよりも少し面倒ですsyncdb
が、まあ。
すべての移行が適用されていることを確認します。
python manage.py migrate
モデルにあるようにテーブルを作成するように Django に指示します。python manage.py syncdb
すべてがあるべき場所にあることを南に伝えます。python manage.py migrate appname --fake
これは、最後の移行を作成してから、どのモデルでも何も変更されていないことを前提としています。
この問題が古いことは知っていますが、この問題に遭遇したばかりで、これが誰かに役立つ場合に備えて解決策を投稿すると思いました.
models.py
データベースがあるフォルダーに移動します。- クラス全体を
models.py
ファイルから切り取ります。 - ./manage.py schemamigration --auto を実行します (これにより、このテーブルの削除を認識する
appname
別の移行が作成されます)。South
データベースに空のテーブルを再作成する必要がある場合がありますSouth
。 - を実行する
migration
と、テーブルがデータベースから削除されます。 - テーブル クラスをファイル内の場所に再度貼り付け
models.py
ます。 - ./manage.py schemamigration
appname
--auto を実行します。南側がテーブルをピックアップし、移行を許可する必要があります - ./manage.py migrateを実行する
appname
と、South はテーブルをデータベースに再度追加する必要があります... 列などを再度追加しますが、明らかにデータはありません。:)