まわ

勉強したことや遊びのこと

Django2以降の変更点で気づいたポイント:path設定, ForeignKeyのon_delete

エラーが出たところから報告

もしかしたら、Django2系特有じゃないかもしれないのですが、Django2系扱って「あれ?」と思ったところが同じ人には役立つかもです^^

変更点1:urls.pyのパスの指定の仕方が変わった"path"を使ったinclude

Django1.8
settings.pyのあるディレクトリのurls.py

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('<アプリ名>.urls', namespace='<アプリ名>')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Django2.0

settings.pyのあるディレクトリのurls.py

from django.contrib import admin
from django.urls import include, path
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('<アプリ名>.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Django1系と2系でpathという新しい指定の仕方が登場しています。includeとpathの組み合わせは上記でエラーなく行けました。一方でstaticファイルの指定方法は一緒でした。

変更点2:models.pyでForeignKeyを使う時、on_deleteは必須になった模様

models.ForeignKey(ProfileInfo, blank=True, null=True, on_delete=models.SET_NULL)

今まではこの引数設定しなくてもエラーにはならなかったので、多分必須になったと思われます。

一応レパートリーをまとめておきます。 - on_delete=models.SET_NULL:ForeignKeyの当該値のある記事があったらForeignKeyはnullにする - on_delete=models.SET_DEFAULT,default=(ForeignKeyのobject) - on_delete=models.CASCADE:ForeignKeyの当該値のある記事も一緒に削除 - on_delete=models.PROTECT:ForeignKeyの当該値のある記事があったら削除不可

参考にさせていただいた記事

torina.top