カスタムユーザーモデルを作成する

2022年5月3日

カスタムユーザーモデルを作成する

djangoでは最初から使えるユーザーモデルが存在するのですが柔軟に仕様変更が出来ません。その為公式ではプロジェクトの最初から「カスタムユーザーモデル」の利用を強く推奨しているとの事です。今回はカスタムユーザーモデルを作成してみましょう。

参考:
  django | AbstractUser でカスタムユーザーを作ってマイグレーションするまでの手順のデモ
  verbose_nameを設定すると何が変わるのか【before/afterで解説】

アプリの作成

今回accountsと言うアプリ名で作成します。


python3.6 manage.py startapp accounts

アプリ登録

先ほど作成したアプリを読み込みます。


#/django_project/config/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts.apps.AccountsConfig',#追加
]

モデル定義

「AbstractUser」を継承してモデルを作成します。
「verbose_name_plural」は管理画面での表示名を指定しています。
※pluralは「s」の自動付与を無効化します。


#/django_project/accounts/models.py
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
    class Meta:
        verbose_name_plural = 'CustomUser'

モデルの指定

どのユーザーモデルをプロジェクトで使用する設定です。
ここでは先ほど作成した「カスタムユーザーモデル」を指定しています。
※指定しないとデフォルトのユーザーモデルを参照します。


#/django_project/config/settings.py
#--カスタムユーザーモデル指定-------------------------------
AUTH_USER_MODEL = 'accounts.CustomUser'

管理画面に登録

先ほど作成したモデルを管理画面で追加/編集できるようにするためにカスタムユーザーモデルを登録します。


#/django_project/accounts/admin.py
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)

データベースを作成

下のコマンドを作成したモデルの内容をデータベースに反映させます。


python3.6 manage.py makemigrations
python3.6 manage.py migrate

無事customuserが作成されたのが確認出来ました。


MariaDB [django]> show columns from accounts_customuser;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| password     | varchar(128) | NO   |     | NULL    |                |
| last_login   | datetime(6)  | YES  |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| username     | varchar(150) | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(150) | NO   |     | NULL    |                |
| email        | varchar(254) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| date_joined  | datetime(6)  | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

2022年5月3日