<< home

Django カスタムユーザーをニックネームでログインするように変更する手順


ステップ 1: CustomUser モデルの修正

accounts/models.py を以下のように修正して、nickname をログインIDとして使用するようにします。

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, nickname, password=None, **extra_fields):
        if not nickname:
            raise ValueError('ニックネームは必須です')
        user = self.model(nickname=nickname, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, nickname, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        return self.create_user(nickname, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    nickname = models.CharField(max_length=30, unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(auto_now_add=True)

    objects = CustomUserManager()

    USERNAME_FIELD = 'nickname'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.nickname

重要:USERNAME_FIELD = 'nickname' を設定することで、ログイン時に nickname を使用するようになります。


ステップ 2: settings.py の設定確認

プロジェクトの settings.py に以下の設定があることを確認します。

AUTH_USER_MODEL = 'accounts.CustomUser'

ステップ 3: マイグレーションの作成と適用

初回のみ必要です(既にユーザーモデルを定義済みの場合、再作成が必要になる可能性があります)。

python manage.py makemigrations
python manage.py migrate

ステップ 4: スーパーユーザーの作成

コンソールで以下を実行して、ニックネームでログインできるスーパーユーザーを作成します。

python manage.py createsuperuser

Nickname: が入力項目になります。


ステップ 5: 管理画面の admin.py を調整

accounts/admin.py を以下のように修正して、管理画面で nickname によるログインができるようにします。

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

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ('nickname', 'is_staff', 'is_superuser')
    ordering = ('nickname',)
    search_fields = ('nickname',)

    fieldsets = (
        (None, {'fields': ('nickname', 'password')}),
        ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('Important dates', {'fields': ('last_login',)}),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('nickname', 'password1', 'password2'),
        }),
    )

admin.site.register(CustomUser, CustomUserAdmin)

ステップ 6: 管理画面でログイン確認

  1. サーバー起動 python manage.py runserver
  2. http://127.0.0.1:8000/admin にアクセス
  3. 作成したスーパーユーザーの「ニックネーム」と「パスワード」でログイン

まとめ

Djangoの認証において ニックネームをログインIDとして使う設定が完了しました。

この方法は、ユーザーが自由な名前でログインできる SNS やコミュニティ系サービスに適しています。


次のステップ




<< home