KAMEYA_WORKS
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
モデルを変更した後、マイグレーションを作成して適用します。
python manage.py makemigrations
python manage.py migrate
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)
既存のユーザーにはニックネームが設定されていないため、スーパーユーザーを再作成するとよいでしょう。
python manage.py createsuperuser
プロンプトで「ニックネーム」の入力が求められます。
python manage.py runserver
でサーバー起動より実践的なアプリでは username
の代わりに email
を使うことも多いです。必要であればその方法も後で紹介します。
この手順で、Djangoのカスタムユーザーに「ニックネーム」を追加し、first_name
/ last_name
を使用しない設計に変更できました。
この構成は、SNSやチャットアプリなど「表示名」を自由に設定したい用途に便利です。