過去より未来に近い今

30オーバーでも始めるには今より遅いことはない。育児と技術両方諦めないようにアウトプット。

Djangoのmigrateでハマった

Djangoのmigrateでハマったので、その内容と解決方法をメモ。

背景

Djnagoのオンラインコースが一通り完了したので、参考にしつつ、自分で別のアプリケーションを作成することにした。 models.pyで定義後、一度makemigrationsとmigrateを実行し、adminサイトで確認したところ、想定していたデータベース構成と異なる部分があったので、models.pyを修正し、再度migrationをしようとしたところエラーが発生した。

発生事象①

makemigrationsしたところ以下のエラーが発生。

f:id:gohh56:20181003004742p:plain

作成したmodelの中でデフォルト設定がないが追加しようとしている項目があるがどうするの?ということらしい。

解決方法①

select an option:

と聞かれたので、ここでは1を選択。実際にデフォルト設定値を入力するよう促されるので、e.g.にある内容を参考に入力。

私の場合はtimezone.nowで解消した。

発生事象②

次にmigrateをしようとしたところ、今度は以下のエラーが発生。

f:id:gohh56:20181003005534p:plain

どうやらmakemigrationsのデフォルト設定が良くなかった様子。

解決方法②

ググったところ、以下の記事に遭遇。

まだデータ登録はしていなかったので、データベースを作り直してもよいと思い、migrations以下のファイルを削除、再度makemigrationsとmigrateを実行したところ正常に処理が完了できた。

qiita.com

エラー自体は解消したのだが、削除したファイルが一体何の意味を持つものなのかはっきりしなかったので、調べた。するとDjango公式ドキュメントに以下の記述を発見。

マイグレーションというのは、データベーススキーマに対するバージョン管理システムのようなものです。makemigrations はモデルの変更点を1つのマイグレーションファイルにパッケージングし(コミットのようなものです)、migrate はその変更点をデータベースに適用する、というわけです。

migrationsディレクトリ内のファイルはこのマイグレーションファイルに該当していたようで、この情報を一度削除することでリセットされたということらしい。

ちなみにより調べるともう少し丁寧なデータベースリセット方法があった。次はこのやり方を参考にして再度対応しよう。

https://trybeetle.com/en/detail/4/