Djangoのuserクラスの拡張について
解決したいこと
Djangoで従業員を管理するアプリを作っています。
Userモデルを拡張したものを複数使ってログインの処理がしたいです。
発生している問題・エラー
AUTH_USER_MODEL にてUserモデルを複数指定しても片方しか反映されません
該当するソースコード
AUTH_USER_MODEL = 'A.User'
AUTH_USER_MODEL = 'B.User2'
#models.py
#Aフォルダ
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
uuid = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
blank=True,
null=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
email = models.EmailField(_('メールアドレス'), unique=True,null=True)
is_staff = models.BooleanField(
_('staff status'),
default=True,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
db_table = 'User'
verbose_name = _('user')
verbose_name_plural = _('ユーザー')
def clean(self):
super().clean()
self.email = self.__class__.objects.normalize_email(self.email)
def email_user(self, subject, message, from_email=None, **kwargs):
send_mail(subject, message, from_email, [self.email], **kwargs)
def get_uuid(self):
return self.uuid
#models.py
#Bフォルダ
#上記と殆ど同じため割愛
class Meta:
db_table = 'User2'
verbose_name = _('user')
verbose_name_plural = _('ユーザー')
自分で試したこと
AUTH_USER_MODEL =["A.User","B.User2"]
などを試したが反映されず
setteing.py
|A--models.py(A.User)
|B--models.py(B.User2)
Django version 3.1.6
0 likes