走る python manage.py makemigrations
が表示されます:変更が検出されなかった場合、python manage.py migrate
と私は得ます:適用する移行はありません。
次に、本番環境に変更をプッシュしようとします:git Push heroku master Everything to-to-date
次に、実稼働環境で次のコマンドを繰り返します。heroku run python manage.py migrate適用する移行はありません。
念のため、本番環境でmakemigrations
を実行します。
heroku run python manage.py makemigrations
No changes detected
なぜそれから私は
ProgrammingError at ....
column .... does not exist
「変更は検出されません」とは、データベースがコードと一貫していることを意味します。これをデバッグするにはどうすればよいですか?
Djangoの移行は、データベースの「Django_migrations」テーブルの下に記録されます。 Django=は、どのマイグレーションが適用され、どのマイグレーションがまだ適用される必要があるかを知る方法です。
DBのDjango_migrationsテーブルをご覧ください。移行が適用されたときに問題が発生した可能性があります。そのため、「存在しない」列に関連する移行ファイル名を持つテーブルの行を削除します。その後、移行を再実行してください。
同じ問題が発生しました(列が存在しません)が、migrate
ではなくmakemigrations
を実行しようとすると(同じ問題だと思います)
原因:移行ファイルを削除し、最後の変更の移行を実行する前に、単一のふりをした初期移行ファイル0001に置き換えました
解決:
Django_migrations
移行が記録されます。これがDjangoがどの移行が適用され、まだ適用される必要があるかを知る方法です。そして、この問題を解決する方法は次のとおりです。
postgresユーザーとしてログインします(私のユーザーはposgresと呼ばれます):
Sudo -i -u postgres
SQLターミナルを開き、データベースに接続します。
psql -d database_name
テーブルをリストし、そのアプリに関連するテーブルを見つけます。
\dt
それらをドロップします(リレーションのドロップ順を考慮してください):
DROP TABLE tablename ;
id |アプリ|名前|適用された
-+ ------ + -------- + --------- +
SELECT * FROM Django_migrations;
そのアプリの移行の行を削除します(IDまたはアプリごとに削除できますが、アプリは「引用符」を忘れないでください):
DELETE FROM Django_migrations WHERE app='yourapp';
ログアウトして移行を実行するだけです(場合によってはmakemigrationsを実行することもできます)。
python manage.py migrate --settings=your.settings.module_if_any
注:場合によっては、すべての移行ではなく、そのアプリのすべてのテーブルを削除する必要はなく、問題の原因となっているモデルのみを削除する必要があります。
これが役立つことを願っています。
同様の問題がありました-Django-adminサイトでモデルをクリックすると、エラーメッセージが表示されました。 models.pyのフィールドをコメントアウトし、移行を実行することで解決しました。これに続いて、フィールドのコメントを外し、移行を再実行しました。その後、エラーメッセージが消えました。