#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
を渡さないといけないらしい。
###解決策
訂正前
class Post(models.Model):
author = models.ForeignKey('auth.User')
訂正後
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を進めていると、
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
と記述するシーンありますが、Whitenoiseがアップデートされて、エラーを引き起こすとのこと。
###解決策
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
上のコードをまず消去。そして、'mysite/setting.py'をいじります。
setting.pyのMIDDLEWAREの部分を
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',
を追加している。