1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サイト見てDjango2試してみたけど、できなかった人向け

Last updated at Posted at 2018-09-22

はじめに

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')),
]
1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?