Mawa Town

Mawaという人が作る小さな町でMawaTownです。技術と音楽が好き。

Djangoのmodelでマイグレーション後に変数名を変えるときのエラーがでたときの解決できるかもしれない方法

Django

Django

Djangoのmodelでマイグレーション後に変数のつづりミスに気づく

ありますよね^^ 例えば"pubdate" って書きたかったのに "puddate"って書いちゃった・・・ これそのままにするとクエリに関するコードを書くたびにpuddate = ・・・みたいにかっこ悪いのと、エラー増加の温床になるので、解決したいですよね。

models.py

class Example(models.Model):
    puddate = models.DateTimeField(auto_now_add=True)

[書き替えます]models.py

class Example(models.Model):
    pubdate = models.DateTimeField(auto_now_add=True)

ここでマイグレーションしてもModelしかいじらなければエラーでません。でも、makemigrations時にこういうエラーに出くわすことがあります。

$python manage.py makemigrations
SystemCheckError: System check identified some issues:

ERRORS:
<class '****.admin.****Admin'>: (admin.E108) The value of 'list_display[3]' refers to 'puddate', which is not a callable, an attribute of '****Admin', or an attribute or method on '****.****'.

あれれ・・・

解決策

Adminの書き換えを忘れたからマッチしてないよということです。なのでadmin.pyもpuddate→pubdateに書き換えてからマイグレーションすると

$python manage.py makemigrations
Did you rename ****.puddate to ****.pubdate (a DateTimeField)? [y/N] y

と、出てきて普通通りリネームできます。直ります。