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
を実行する。


Djangoで直接SQLを実行した値をTemplateに表示する

例えば、viewsで直接SQLを実行した場合、結果を表示するにはどうするのでしょうか?
from django.db import connection
views側
SQL = ‘SELECT A.id,B.name,C.dept_id ‘ \
            ‘ FROM exhibitinfo A LEFT JOIN dapartment B’ \
‘ ON A.dept_id = B.id AND B.syain_id = {}’  \
            ‘ INNER JOIN customuser C’ \
‘ ON A.user_id = C.id’ \
            ‘ WHERE A.is_display=True ORDER BY A.id DESC;’.format(request.user.id)
with connection.cursor() as cursor:
  cursor.execute(SQL)
            exhibit = cursor.fetchall()
for history in connection.queries: 
           logger.info(‘****** history:’ + str(history))
context = {
        ‘exhibit’: exhibit, 
}


template側
{% for item in exhibit %}
<div>{{ item.0}}</div> ← id
<div>{{ item.1}}</div> ←name
<div>{{ item.2}}</div> ←dept_id
{% endfor %}

となります。
例が悪くすみません。
(というか、躓きそうなところをできるだけ網羅しました。)