Djangoが去年の9月に1.7にバージョンアップしてて、今更ながらアップデートしてみた。色々教えて頂いた@key3さんに感謝!
※注 アップデートの前に必ずデータとかソースとか色々バックアップしておくこと。
Django本体のアップデート
Djangoはpipで管理してるので、pipコマンドでアップデート出来る
$ pip install django -U
これで本体はアップデート完了した。
プロジェクトをDjango1.7で動かす
何も変更せずにおもむろに
$ python manage.py runserver
とするとエラー出て動かなかった。
raise AppRegistryNotReady("Models aren't loaded yet.")
Tracebackを見てみるとどうもmodels.pyの中で
# models.py
admin.site.register(Model)
とかやってたのがまずかったみたいで、管理サイトで使うモデル定義などのコードをadmin.pyに移動したら上のエラーは出なくなった。何となくで書いてたらいかんな。ちなみにアップデートには関係無いけど、Django1.7で@admin.register(Model)というデコレーターが使えるようになったので、そっちに変えた方がスマートな気がする。
次はSouthでマイグレーションやってるプロジェクトだったので、下のようなエラーが出た。
raise RuntimeError("South does not support Django 1.7 or higher. Please use native Django migrations.")
要はSouthはもうサポートしてないからDjango自身のマイグレーションでやってねということらしい。
Migrations | Django documentation | Djangoを見ながらやってみる。ざっくり手順を日本語で書いておく
- マイグレーションの状態がちゃんと最新になっているか確認する
- settings.pyのINSTALLED_APPSの行から'south'を取り除く
- 数字の付いたマイグレーションファイルを全て削除する。ディレクトリと__init__.pyは残す。.pycファイルも削除すること。
- python manage.py makemigrasionsを実行する。Djangoが空のマイグレーションディレクトリに新しい初期マイグレーションを作る。
- python manage.py migrateを実行する。Djangoは初期マイグレーションをチェックして、実行しないで適用済みにする。
以上やってみたら、エラーは出ずにプロジェクトをDjango1.7に対応できた。めでたしめでたし。