Date Modified Tags django / python

Southってのを使うとモデルを変更した時に、サクッとDB(PostgreSQL)に反映出来るらしんだけど、今すでに作成中のプロジェクトに反映させたかったので、メモ

インストール

$ pip install south

設定

# settings.py
INSTALLED_APPS = (
....
    'south',
)

作成中のアプリをsouthに追加

データベースが関連しているモデルが作成されているアプリにコマンドを実行すればおk

$ python manage.py schemamigration アプリ名 --init
$ python manage.py syncdb --all
$ python manage.py migrate アプリ名 --fake

syncdbしないでmigrateすると、PostgreSQLだとエラーが出たので、先にsyncdbするのが必要みたい

実際にモデル変更した時の作業を追記

モデル変更

モデルを変更したら次のコマンドでデータベースに反映する

$ python manage.py schemamigration アプリ名 --auto
$ python manage.py migrate アプリ名

この時にデータベース内の値が変更した制約等に引っ掛かる場合は途中で止まったりするので、制約に合うようにデータを変更するとか修正する。

参考:Yura YuWrite: [django] 既存のプロジェクトにsouthを追加する方法postgresql - Trouble getting Django set up on Heroku using South - keep getting ProgrammingError: relation does not exist - Stack Overflow