我想在创建用户时设置一个默认用户名。
我正在使用 Django
例如: 在 Freelancer.com 用户注册时,他们的用户名将默认为
@their_email
如果我使用电子邮件注册 -> john123@gmail.com 我的用户名是 -> @john123
我怎样才能在模型中做到这一点?
我目前的模型是:
from django.contrib.auth.models import AbstractUser
from django.db.models import CharField
from django.urls import reverse
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
class User(AbstractUser):
"""Default user for Mofidon."""
#: First and last name do not cover name patterns around the globe
name = CharField(_("Name of User"), blank=True, max_length=255)
first_name = None # type: ignore
last_name = None # type: ignore
def get_absolute_url(self):
"""Get url for user's detail view.
Returns:
str: URL for user detail.
"""
return reverse("users:detail", kwargs={"username": self.username})
class CustomAccountManager(BaseUserManager):
def create_user(self, email, name, username, password, **other_fields):
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(
email=email,
name=name,
username=username,
**other_fields
)
user.set_password(password)
user.save()
return user
class UserModel(AbstractBaseUser, PermissionsMixin):
name = models.CharField(_("Name of User"), max_length=100)
# username = models.CharField(_("Username of User"),max_length=20,unique=True, blank=True, null=True)
username = None
email = models.EmailField(_("Username of User"), unique=True)
is_mofid = models.BooleanField(default=False)
is_normal = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateField(auto_now_add=True, blank=True)
USERNAME_FIELD = email
USER_REQUIRED = ['name']
objects = CustomAccountManager
def __str__(self):
return self.name