Django入門:Blogアプリの制作 - データベース
はじめに
モデルの作成
blog\models.py
from django.conf import settings from django.db import models from django.utils import timezone # Create your models here. class Article(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, 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
モデルの登録
blog\admin.py
from django.contrib import admin # Register your models here. from .models import Article admin.site.register(Article)
データベースの設定
sqlite3
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': DB名, 'USER': ユーザ名, 'PASSWORD': パスワード, 'HOST': ホスト名, 'PORT': '3306', } }
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': DB名, 'USER': ユーザ名, 'PASSWORD': パスワード, 'HOST': ホスト名, 'PORT': '5432', } }
データベースへ反映
マイグレーションファイルの作成
python manage.py makemigrations blog
blog\migrations\0001_initial.py
# Generated by Django 3.1 on 2020-09-03 00:55 from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Article', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200)), ('text', models.TextField()), ('created_date', models.DateTimeField(default=django.utils.timezone.now)), ('published_date', models.DateTimeField(blank=True, null=True)), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), ]
発行sqlの確認
python manage.py sqlmigrate blog 0001
BEGIN; -- Create model Article CREATE TABLE "blog_article" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(200) NOT NULL, "text" text NOT NULL, "created_date" datetime NOT NULL, "published_date" datetime NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED ); CREATE INDEX "blog_article_author_id_905add38" ON "blog_article" ("author_id"); COMMIT;
テーブルの作成
python manage.py migrate
管理サイト
管理者ユーザ
スーパユーザの作成
python manage.py createsuperuser
設定項目
項目 | 値 |
---|---|
ユーザ名 | admin |
メールアドレス | admin@example.com |
パスワード | myPassword |
動作確認
データベース操作
全記事データ取得
Article.objects.all()
フィルタリング記事データ取得
Article.objects.filter(created_data__lte=timezone.now())
記事データのソート
Article.objects.all().order_by('publised_data')
ユーザデータ取得
me = User.objects.get(username='admin')
記事データの追加
Article.objects.create(author=me, title='Sample Article', text='This Article is sample page.')
フィルタリングと並び替え
filter
フィルタ | 説明 |
---|---|
author=me | authorがmeと一致 |
title__contains='Django' | titleフィールドに'Django'を含む |
published_date__lte=timezone.now() | 今日以前 |
order_by
フィルタ | 説明 |
---|---|
Article.objects.order_by('created_date') | created_date昇順 |
Article.objects.order_by('-created_date') | created_date降順 |
終わりに
- 今回は、データベースの使い方をご紹介しました。