🐈

[Django] No changes detected

2021/05/02に公開

No changes detectedと言われた

Djangoでマイグレーションファイルを作成するおなじみのコマンド

python manage.py makemigrations app_name

これを実行すると

No changes detected in app 'app_name'

変更がありませんと言われてしまった。。。がっつりモデルいじったのだけど。

[原因] models.pyをmodelsフォルダに置き換えた

クラスごとにファイルを切りたくて、models.pyファイルから、modelsフォルダにモデルファイル入れるスタイルに変えていたのが問題だったみたいです。

[解決策] models/init.pyにimportを追加する

modelsフォルダに__init__.pyを作成して、その中にmodels.Modelを継承した該当のモデルクラスをimportします。

以降は例を出して解説してみます。

フォルダ構成

app_name/models/__init__.py
.
├── app_name
│   ├── models
│   │   ├── __init__.py
│   │   └── product.py
└── その他のDjangoファイル

モデルファイル

この例の説明のためにproductというモデルを用意しています。

app_name/models/product.py
from django.db import models


class Product(models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=200, null=False, blank=False)

initファイル

このinitファイルの変更が重要です。このinitファイルに該当のモデルをimportします。

makemigrations実行時にはmodels.pyもしくは、このmodels/__init__.pyを見に行くと考えれば良さそうです。

app_name/models/__init__.py
from .product import Product

改めてmakemigrations実行

python manage.py makemigrations app_name

私はこれでうまくマイグレーションファイルを作成できました。

参考

https://qiita.com/tafi_tarutaru2/items/2c987e51714950ea6bfc

https://stackoverflow.com/questions/36153748/django-makemigrations-no-changes-detected

Discussion