migrateでテーブルが追加されない

Djangoで新規に追加したテーブルがmakemigrationsで認識されない現象が発生したのでググって解決しようとして、うまくいかなかったので備忘録。
まず最初に躓いたのが、AttributeError: ‘NoneType’ object has no attribute ‘is_relation’というわけのわからないエラー。
これはクライアント側でテストしたソースをgitでデプロイ環境へアップした際に発生。
この現象はdjango-reset-maigrationsをインストールし、INSTALLED_APPSに’reset_migrations’,を追加して、python manage.py reset_migrations appを実行して解決しましたが、次にテーブルを追加した後に同じようにデプロイした後、makemigrationsすると何も更新するものないよと言われました。
それで、デプロイ先のテーブルを覗くとやはり、該当するテーブルが存在しないので、ググって、app/migratesの下の__pycache__と、__init__.py以外を削除すればいいのかと思いおもいきり削除した結果、django.db.utils.ProgrammingError: relation “app_xxxxxxxxxx” already existsというのが出るようになってしまいました。
今思えば当然のことですが、仕方ないので、データベースから、”app_*”をdrop。
ようやく、makemaigrationsからmigrateまで、無事実行できました。
本番ではデータのバックアップ/戻しなど手間のかかる作業となりそうです。

一つのアプリだけテーブル削除して、やり直したければ(通常のmigrateがスルーしてしまう場合)以下の方法が有効のようです。
python manage.py migrate –fake app_xxxxxxxxxx zero
を実行する

python manage.py showmigrationsで確認

app_xxxxxxxxxx
[ ] 0001_initial

※スルーする場合だいたい、[X]0001_initialとなっているはずなので、XがはずれていればOK

python manage.py migrate
を実行する。