Django
migration

Django で makemigrations したら無限に migration ファイルが作られる問題の解決方法

More than 1 year has passed since last update.

Django のプロジェクトで

class Task(models.Model):
    remind_task = models.OneToOneField('RemindTask', blank=True, null=True)
    …


class RemindTask(models.Model):
    …

という感じで適当にRelationを持ったモデルがあって、 RemindTask は以前から作ってあって、今回 Task モデルに新しく remind_task のフィールドを追加するという状況。
ここで、

$ python manage.py makemigrations

をすると

$ python manage.py makemigrations
Migrations for 'your_app':
  your_app/migrations/0003_auto_20170819_1648.py
    - Alter field remind_task on task

となって、特に問題なし。
この後にさらにmakemigrationをすると

$ python manage.py makemigrations
Migrations for 'your_app':
  your_app/migrations/0004_auto_20170819_1649.py
    - Alter field remind_task on task

あれ、また同じファイルが作られる…
もう一回やると

$ python manage.py makemigrations
Migrations for 'your_app':
  your_app/migrations/0005_auto_20170819_1650.py
    - Alter field remind_task on task

あれ、、まただ。。。
何度やっても同じmigrationファイルが永遠に作られ続ける…

どうなってるんだーって何日も考えていたんだけど、ようやく答えがわかった。。

以前に RemindTask モデルを作ったときに

class remindtask(models.Model):
    …

と名前を間違えてしまい、この状態で makemigrations したようで、このモデルの migration ファイルが

migrations.CreateModel(
    name='remindtask',
    …

となっていた…
(その後にmodels.pyの名前を RemindTask に変えた模様)

このままでもDBには正しくテーブルが作られて、アプリケーションも問題なく動いていたので気づかなかった。。

migrations.CreateModel(
    name='RemindTask',
    …

と書き直したら

$ python manage.py makemigrations
No changes detected

になりました。

https://github.com/django/django/tree/master/django/db/migrations
Djangoのバグかなーと思ってこのあたり読んでましたが、関係なかったですね…