LoginSignup
17
12

More than 5 years have passed since last update.

DjangoGirlsで生じたエラーまとめ

Last updated at Posted at 2018-09-13

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',を追加している。

17
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12