DjangoでカスタムAdminインターフェースを構築する

DjangoのAdminインターフェースは、モデルのCRUD操作やユーザー管理、権限設定などを迅速に実現できる強力なツールです。以下では、日本語化やタイムゾーン設定、そしてモデルのカスタム表示名を追加して、効率的なAdminインターフェースを構築する方法を説明します。

1. 設定ファイルの編集

プロジェクトのsettings.pyファイルを開き、以下の内容を変更または追加してください:

# 言語コードとタイムゾーンの設定
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

# ローカライズに関する設定
USE_L10N = False

# 日付と時刻のフォーマットを日本語風に調整
DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'

2. モデルへのメタ情報追加

各モデルに対して、Admin画面での表示名やインスタンス名を指定するためのMetaクラスと__str__メソッドを追加します。

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        verbose_name_plural = verbose_name = "カテゴリー"

    def __str__(self):
        return self.name

class Item(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = verbose_name = "アイテム"

    def __str__(self):
        return self.name

class Purchase(models.Model):
    user = models.CharField(max_length=100)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = verbose_name = "購入履歴"

    def __str__(self):
        return f"{self.user}の購入"

3. Admin登録とカスタマイズ

admin.pyファイルを編集し、各モデルをAdminインターフェースに登録します。また、リスト表示やフィルター機能を追加します。

from django.contrib import admin
from .models import Category, Item, Purchase

# Adminサイトのヘッダーとタイトルを変更
admin.site.site_header = 'Django ショップ管理'
admin.site.site_title = 'Django ショップ管理'

# 内部的に関連するモデルを表示させるためのインラインクラス
class PurchaseInline(admin.TabularInline):
    model = Purchase

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    fields = ('name',)
    list_display = ('name',)
    search_fields = ('name',)

@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
    fields = ('name', 'category')
    list_display = ('name', 'category')
    list_filter = ('category',)
    search_fields = ('name',)

@admin.register(Purchase)
class PurchaseAdmin(admin.ModelAdmin):
    fields = ('user', 'item')
    list_display = ('user', 'item', 'created_at')
    list_filter = ('user',)
    search_fields = ('user',)
    inlines = [PurchaseInline]

これでAdminインターフェースが完成です! 必要に応じてさらに詳細なカスタマイズを行うことも可能です。

タグ: Django django-admin japanese-localization

6月14日 17:46 投稿