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に対応できた。めでたしめでたし。