Help us understand the problem. What is going on with this article?

【Django入門】簡単なブログページを作る際の大まかな流れ ~ブログモデル編~

はじめに

未来電子テクノロジーでインターンをしている<小栗>です。
「プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

この記事は、【Django入門】簡単なブログページを作る際の大まかな流れ ~アプリケーション編~
こちらの記事の続きです!

Django Brothersというサイトをまとめた
記事になっているので、Django初心者にはおすすめです!

データベースを作る

データベースは表のようになっており、テーブルと呼ばれます。
そして、新たにテーブルを作る際、モデルを使います。
モデルとは、データベースとやりとりをするクラスのことです。
クラスとはオブジェクトの設計図のような役割を果たす物です。
このモデルは、各アプリケーション内のmodels.pyに記述します。

この内容について以下で説明します。

/django_bog/blogs/models.py
from django.db import models

class Blog(models.Model):
    title = models.CharField(blank=False, null=False, max_length=150)
    text = models.TextField(blank=True)
    created_datetime = models.DateTimeField(auto_now_add=True)
    updated_datetime = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

from django.db import modelsについて
Djangoにおけるモデル型の基本形で、Blogモデルに継承させて作成していきます。
このクラスをもとに作られたインスタンスはデータベースに保存するという設定をしています。

title = models.CharField(blank=False, null=False, max_length=150)について

3行目の内容は、titleというフィールド(列)名をつけています。
このtitleにはmodels.CharFieldという型が指定されていて、文字列を入力できる様にしています。
blank=False, null=Falseはフィールドが空白であることは許容されないという意味です。
max_length=150はタイトルが最大150文字という制限がかけられています。

created_datetime, updated_datetimeについて

これらのフィールドでは、models.DateTimeFieldという型が指定されているので、日時情報が保存されるようになっています。
引数でauto_now_add, auto_nowが与えられているので、それぞれインスタンスが作成された日時、更新された日時が自動的に保存されます。

def __str__(self)について

これは各インスタンスを表示する際に利用する文字列を表しています。
つまり、ブログ一覧のようなページで、タイトルを表示するのか、本文を表示するのか、はたまた追加日時を表示するのかといった設定ができます。
return self.titleとするとタイトルが、return self.textとすると本文が表示されるということです。

マイグレーション

データベースを作成する際の流れは「models.pyファイルで設計 → マイグレート処理で反映」です。
従って先ほどまで作っていたmodels.pyファイルをマイグレートしてデータベースに反映させる必要があります。
その際に必要なコマンドは以下の二つです。

django_blog
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py makemigrationsについて

django_blog/blogs/migrationsディレクトリの中にマイグレーションファイルが新たに追加されます。
マイグレーションファイルとはmodels.pyファイルで作成したデータベースの設計情報がまとめられたものです。

python manage.py migrateについて

マイグレーションファイルの情報をデータベースに反映させるコマンドです。

※models.pyファイルを変更した際はその都度、マイグレード処理が必要になります。

Adminページを利用する

スーパーユーザーアカウントを作成

$ python manage.py createsuperuser

Adminページを編集するために、admin.pyファイルを編集します。

BlogモデルをAdminに追加する
django_blog/blogs/admin.py
from django.contrib import admin 
from .models import Blog #admin.pyファイルと同じ階層にあるmodels.pyファイルで定義したBlogモデルをインポートしている。

admin.site.register(Blog) #インポートしたBlogモデルを、Adminページで利用できるようにしている。
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away