<< home

Djangoカスタムユーザーにニックネームを追加し、名字・名前を使わない設定


ステップ 1: CustomUserモデルを編集

accounts/models.py を開いて、以下のように編集します。

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 不要な項目は空にして無効化(姓・名)
    first_name = None
    last_name = None

    # 新しく追加するフィールド
    nickname = models.CharField(max_length=30, unique=True)

    def __str__(self):
        return self.nickname

ステップ 2: マイグレーションファイルを作成して適用

モデルを変更した後、マイグレーションを作成して適用します。

python manage.py makemigrations
python manage.py migrate

ステップ 3: 管理画面にニックネームを表示

accounts/admin.py を編集して、ニックネームが表示されるようにします。

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    fieldsets = (
        (None, {'fields': ('username', 'password', 'nickname')}),
        ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('Important dates', {'fields': ('last_login', 'date_joined')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'nickname', 'password1', 'password2'),
        }),
    )
    list_display = ('username', 'nickname', 'is_staff')

admin.site.register(CustomUser, CustomUserAdmin)

ステップ 4: スーパーユーザーを作り直す(必要に応じて)

既存のユーザーにはニックネームが設定されていないため、スーパーユーザーを再作成するとよいでしょう。

python manage.py createsuperuser

プロンプトで「ニックネーム」の入力が求められます。


ステップ 5: 管理画面でニックネームが表示されることを確認

  1. python manage.py runserver でサーバー起動
  2. http://127.0.0.1:8000/admin にアクセス
  3. ログインして「Users」画面を確認し、nickname 列が表示されていることを確認

補足: username を email に置き換える場合

より実践的なアプリでは username の代わりに email を使うことも多いです。必要であればその方法も後で紹介します。


まとめ

この手順で、Djangoのカスタムユーザーに「ニックネーム」を追加し、first_name / last_name を使用しない設計に変更できました。

この構成は、SNSやチャットアプリなど「表示名」を自由に設定したい用途に便利です。




<< home