はじめに
PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説 (https://qiita.com/yoshizaki_kkgk/items/f3c79e38b802c7fc8863)
こちらのサイトでDjangoの導入をやっても、自分の環境では2つ上手くいかなかった点があったのでまとめました。
開発環境
・OS: macOS High Sierra(10.13)
$ python3 -V
Python 3.6.5 :: Anaconda, Inc.
django.get_version()
'2.1.1'
モデルの作成
blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
とありますが、Django2になってから以下のようなエラーが出ます。
TypeError: __init__() missing 1 required positional argument: 'on_delete'
そこで、以下のように書き換えましょう。
on_deleteを追加してあげています。
blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey("auth.User", on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
ルーティングの設定
myapp/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('blog.urls')),
]
このままだと、以下のようにテンプレートが見つからないとか言われてしまいます。
TemplateDoesNotExist at /
そこで、こんな感じに書き換えてあげましょう。
adminのurlをpathに変更しています。
すると、ちゃんとテンプレートを見つけてくれます。
myapp/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include('blog.urls')),
]