Django Admin で Markdown 記事を管理するための Post モデルの設計と、Markdownx を活用したエディタの適用方法を詳細に解説します。
前回の記事では、Django Admin に Markdown ファイルの取り込み機能を追加し、記事を効率的に管理する方法を解説しました。
今回は、その基盤となる Post
モデルの詳細設計について掘り下げ、Markdownx を適用したリッチな編集環境の構築 について説明します。
Markdown 記事を Django Admin で管理するために、以下の項目を持つ Post
モデルを設計します。
Post
モデルは、記事のタイトル、作成日、カテゴリ、内容(Markdown)、スラグ(URL 用識別子)などのフィールドを持ちます。
models.py
PYTHONimport uuid from django.db import models from markdownx.models import MarkdownxField class Category(models.Model): COLOR_CHOICES = [ ("primary", "Primary"), ("secondary", "Secondary"), ("success", "Success"), ("danger", "Danger"), ("warning", "Warning"), ("info", "Info"), ("light", "Light"), ("dark", "Dark"), ] name = models.CharField(max_length=100, unique=True, verbose_name="カテゴリ名") order = models.PositiveIntegerField(default=0, verbose_name="表示順") description = models.TextField(blank=True, verbose_name="説明") color = models.CharField( max_length=15, choices=COLOR_CHOICES, default="primary", verbose_name="カラー (Bootstrap)", ) def __str__(self): return self.name class Theme(models.Model): name = models.CharField(max_length=100, unique=True, verbose_name="テーマ名") def __str__(self): return self.name class Post(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) custom_id = models.IntegerField(unique=True, db_index=True, verbose_name="カスタムID") title = models.CharField(max_length=255, verbose_name="タイトル") date = models.DateField(null=True, verbose_name="日付") category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL) content = MarkdownxField(verbose_name="本文") is_pinned = models.BooleanField(default=False, verbose_name="ピン留め") slug = models.SlugField(max_length=255, unique=True, null=True, verbose_name="スラグ") embedding = models.JSONField(blank=True, null=True, verbose_name="埋め込み") created_at = models.DateTimeField(auto_now_add=True, verbose_name="作成日") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新日") def __str__(self): return f"{self.title} ({self.date})"
この設計により、Markdown 形式で記事を保存し、カテゴリと紐付けることができます。
Markdownx を導入すると、Django Admin で Markdown をリアルタイムプレビューしながら編集できるようになります。
まず、markdownx
パッケージをインストールします。
BASHpip install django-markdownx
次に、settings.py
に markdownx
を追加します。
PYTHONINSTALLED_APPS = [ ... 'markdownx', ]
また、urls.py
に以下の設定を追加します。
PYTHONfrom django.urls import path, include urlpatterns = [ path("markdownx/", include("markdownx.urls")), ]
Markdownx を Django Admin に適用するため、Post
モデルの管理画面をカスタマイズします。
admin.py
PYTHONfrom django.contrib import admin from markdownx.admin import MarkdownxModelAdmin from base.models import Post @admin.register(Post) class PostAdmin(MarkdownxModelAdmin): list_display = ("title", "category", "created_at") search_fields = ("title", "content") list_filter = ("category", "created_at")
Markdownx のエディタサイズを調整するため、カスタムフォームを適用します。
PostForm
を作成し、Markdown エディタの縦幅を広げ、より編集しやすい環境を整えます。
base/admin/_markdown_form.py
PYTHONfrom django import forms from markdownx.widgets import MarkdownxWidget from base.models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = '__all__' widgets = { 'content': MarkdownxWidget(attrs={ 'rows': 25, # 行数を増やして縦幅を広くする 'style': 'min-height:500px;', # 必要に応じて高さを調整 }), } class Media: css = { 'all': ( '/static/markdownx/admin/css/markdownx.css', '/static/css/custom_markdownx.css', ) }
このカスタムフォームを PostAdmin
に適用します。
admin.py
PYTHONfrom base.forms import PostForm @admin.register(Post) class PostAdmin(MarkdownxModelAdmin): form = PostForm
この設定により、Django Admin のエディタが広くなり、Markdown の編集がより快適になります。
Markdownx のエディタサイズを調整するため、forms.py
にカスタムフォームを作成します。
forms.py
PYTHONfrom django import forms from markdownx.widgets import MarkdownxWidget from base.models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = '__all__' widgets = { 'content': MarkdownxWidget(attrs={'rows': 25, 'style': 'min-height:500px;'}), }
このカスタムフォームを PostAdmin
に適用します。
admin.py
PYTHONfrom base.forms import PostForm @admin.register(Post) class PostAdmin(MarkdownxModelAdmin): form = PostForm
これにより、Django Admin のエディタが広くなり、Markdown の編集がしやすくなります。
今回は、Django Admin で Markdown 記事を管理するための Post
モデルの詳細設計と、Markdownx を適用する方法について解説しました。
Post
モデルに MarkdownxField
を適用し、Markdown 記事を管理できるようにしたPostAdmin
で MarkdownxModelAdmin
を利用し、Django Admin でリアルタイムプレビューを可能にした回 | タイトル | リンク |
---|---|---|
第 1 回 | ブログ設計図の概要 | 詳 細 |
第 2 回 | .md ファイルの取込みと JSON 化の概要 | 詳 細 |
第 3 回 | Embedding API を活用した類似記事推薦 | 詳 細 |
第 4 回 | Next.js による推薦記事 API の活用 | 詳 細 |
第 5 回 | Post モデルの設計と Markdownx の適用 | この記事 |
第 6 回 | Django 画像アップロード時の画像処理 | 詳 細 |
第 7 回 | Markdownx で画像をアップロード | 詳 細 |
第 8 回 | 多様な記事推薦システムの導入 | 詳 細 |
第 9 回 | 自動クラスタリング vs. 手動分類 | 詳 細 |
第 10 回 | 「公開・非公開」管理機能の実装 | 詳 細 |
当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。