applicaton/models/user.py
import uuid
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.core.validators import RegexValidator
from django.db import models
# カスタムユーザクラスを定義
class User(AbstractUser):
username_validator = UnicodeUsernameValidator()
class Role(models.IntegerChoices):
MANAGEMENT = 0
GENERAL = 1
PART_TIME = 2
# 不要なフィールドはNoneにすることができる
first_name = None
last_name = None
date_joined = None
groups = None
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
employee_number = models.CharField(
unique=True,
validators=[RegexValidator(r"^[0-9]{8}$")],
max_length=8,
# 管理者のログイン畫面で社員番號と表示される
verbose_name="社員番號",
)
username = models.CharField(
max_length=150,
unique=True,
validators=[username_validator],
)
email = models.EmailField(max_length=254, unique=True)
role = models.PositiveIntegerField(
choices=Role.choices, default=Role.PART_TIME
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
# デフォルトはusernameだが今回は社員番號を指定
USERNAME_FIELD = "employee_number"
# uniqueのemailとusernameを指定
REQUIRED_FIELDS = ["email", "username"]
class Meta:
ordering = ["employee_number"]
db_table = "User"
def __str__(self):
return self.username
カスタムユーザを作成後は以下をsettings.pyに記述します
application內(nèi)のUserクラスを參照しているのでmodels.pyに記載していて別ファイルに移動させたとしても下記を変更する必要がありません
settings.py
AUTH_USER_MODEL = "application.User"