Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@Kobayashi2019

Django-Reactでブログ作成part2:モデルの作成と管理者画面

More than 1 year has passed since last update.

目次

  1. Django-Reactでブログ作成part1:docker-composeでプロジェクトを立ち上げ
  2. Django-Reactでブログ作成part2:モデルの作成と管理者画面 <-- 今ここ

初めに

この記事は連載記事です。

今回やること

Django REST frameworkを使いながらビュー、ルート、モデル作成などを行う。

アプリケーションの作成

新しくアプリを作ります。
プロジェクトとは違うもので、こちらは機能ごとにもっと細かく分けます。
プロジェクトは1つしか作らないのに対してアプリは複数作れます。
今回は1個しかつくらないかも?

docker-compose run backend python manage.py startapp blog

これでblogというアプリが作れました。

tree1.PNG

アプリを作ったときは必ずsetting.pyINSTALLED_APPSにアプリ名を追加します。

mysite/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'blog',#追加
]

モデルの作成

これを作ることでデータベースを簡単に操作できるようになります。

models.py

今回作るモデルはPostモデルとCommentモデルです。
以下をコピペしましょう。

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

class CommentModel(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    target_post = models.ForeignKey(Post, on_delete=models.SET_NULL, null=True)
    comment = models.TextField(blank=True, null=True)
    published_date = models.DateTimeField(auto_now_add=True)

マイグレーション

モデルを変更したときもマイグレーションが必要です。

docker-compose run backend python manage.py makemigrations blog
docker-compose run backend python manage.py migrate blog

管理者画面の作成

admin.py

blog/adminを次のように変更します。

blog/admin.py
from django.contrib import admin
from .models import Post, Comment

admin.site.register(Post)
admin.site.register(Comment)

ついさっき作ったPostを管理者画面と紐づけました。

createsuperuser

管理者画面を使うには管理者のアカウントが必要です。

これはコマンドで作れます。

docker-compose run backend python manage.py createsuperuser

コマンドを打ち込み、username, email, passwordを入力します。
今回はこのようにしました。
実際はパスワードは表示されません。

Starting electronicjournal_db_1 ... done
ユーザー名 (leave blank to use 'root'): admin
メールアドレス: admin@email.com
Password: adminpass
Password (again): adminpass
このパスワードは ユーザー名 と似すぎています。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

パスワードが簡単すぎて怒られましたが気にしない。

管理者画面

サーバを立ち上げ、

docker-compose up

http://127.0.0.1:8000/admin/ にアクセスします。
先ほど設定したusernameとpasswordを入力。

admin2.PNG

ログインすると次のような画面になります。

admin3.PNG

ここでPostやCommentを投稿したり、ユーザーを作ったりできます。
しかしすぐにもう少し使いやすい画面を作るのでここで弄らなくても大丈夫。
/adminにアクセスすれば簡単にいろいろ弄れることは覚えておきましょう。

次回

Django REST frameworkでAPIを作ります。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
Kobayashi2019
大阪工業大学学部4年、専門はロボットなのにプログラミングしかしない男。
techtrain
プロのエンジニアを目指すU30(30歳以下)の方に現役エンジニアにメンタリングもらえるコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?