Model(DB)
データベース関連
ブログ記事用にmodelsで定義するテーブルは以下の3つ。
Category
Tag
Article
blog/models.pyのソースコードは以下。詳細の説明は各セクション を参照。
必要なパッケージは各クラスの基底クラスとなるmodelsをdjango.dbからimportしている。また記事作成日時などを取得するために、django.utilisからtimezoneをimport。
from django.db import models
from django.utils import timezone
# Create your models here.
class Category(models.Model):
class Meta:
# テーブル名
db_table = "Category"
name = models.CharField('カテゴリ', max_length=20, unique=True)
slug = models.SlugField(unique=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Tag(models.Model):
class Meta:
# テーブル名
db_table = "Tag"
name = models.CharField('タグ名', max_length=255, unique=True)
slug = models.SlugField(unique=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Article(models.Model):
class Meta:
# テーブル名
db_table = "Article"
ordering = ['-section']
""" Article data """
category = models.ForeignKey(Category, on_delete=models.PROTECT)
title = models.CharField('タイトル', max_length=20)
section = models.CharField('章', max_length=20, blank=True)
text = models.TextField('本文')
tags = models.ManyToManyField(Tag, verbose_name='タグ', blank=True)
created_at = models.DateTimeField('作成日', default=timezone.now)
updated_at = models.DateTimeField('更新日', default=timezone.now)
published_at = models.DateTimeField(blank=True, null=True)
is_public = models.BooleanField('公開状況', default=True)
def save(self, *args, **kwargs):
if self.is_public and not self.published_at:
self.published_at = timezone.now()
super().save(*args, **kwargs)
def __str__(self):
最終更新
役に立ちましたか?