Edited at

DjangoGirlsで生じたエラーまとめ


DjangoGirlsを進めていくなかで生じたエラー

djangoGirlsのチュートリアルをDjango Girls Tutorialを元に進めていく中で、仕様の変化などで生じたエラーをまとめてみた。自分のメモ用


環境

python:3.6.5

Django:2.1.1


参考元

Djangoのincludeの仕様が変っていてハマったのでメモ

Django2.0から必須になったon_deleteの使い方

DjangoアプリをHerokuにデプロイする時のエラー対処 whitenoise編


エラー1:on_delete

Django Girls TutorialのDjango modelsの項で、モデルの変更を伝えるために以下を実行すると、

(myvenv) ~/djangogirls$ python manage.py makemigrations blog

TypeError: __init__() missing 1 required positional argument: 'on_delete'

とエラーが、、、 調べてみるとDjangoはバージョン2以降から、blog/models.pyのForeignKeyの引数にon_deleteを渡さないといけないらしい。


解決策

訂正前


blog/models.py

 class Post(models.Model):

author = models.ForeignKey('auth.User')

訂正後


blog/models.py

 class Post(models.Model):

author = models.ForeignKey('auth.User',on_delete=models.CASCADE)

因数のところにon_delete=models.CASCADEと渡せばOK!


エラー2:whitenoiseの仕様変化に伴うエラー

デプロイの項の終盤で、

command line

(myvenv) ~/djangogirls$ python manage.py runserver

と入力すると

command line

ImportError:
Your WhiteNoise configuration is incompatible with WhiteNoise v4.0
This can be fixed by following the upgrade instructions at:
http://whitenoise.evans.io/en/stable/changelog.html#v4-0

とかいうエラーが発生。色々調べたところ、Django Girls Tutorialを進めていると、


blog/wsgi.py

from whitenoise.django import DjangoWhiteNoise

application = DjangoWhiteNoise(application)

と記述するシーンありますが、Whitenoiseがアップデートされて、エラーを引き起こすとのこと。


解決策


blog/wsgi.py

from whitenoise.django import DjangoWhiteNoise

application = DjangoWhiteNoise(application)

上のコードをまず消去。そして、'mysite/setting.py'をいじります。

setting.pyのMIDDLEWAREの部分を


mysite/setting.py

MIDDLEWARE = [

'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

に変更。2行目に'whitenoise.middleware.WhiteNoiseMiddleware',を追加している。