如何将默认用户名设置为 Django 电子邮件字段中的内容?

时间:2021-05-28 15:44:05

标签: django django-models

我想在创建用户时设置一个默认用户名。

我正在使用 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

0 个答案:

没有答案
相关问题