微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在django自定义用户中添加了一个“名称”字段,创建时会要求提供该字段,但会保存为所有创建的用户的默认“对象”

如何解决我在django自定义用户中添加了一个“名称”字段,创建时会要求提供该字段,但会保存为所有创建的用户的默认“对象”

我在我的自定义Django用户模型中添加一个字段“名称”,当我运行createsuperuser时,甚至当我使用create_user()从外壳创建普通用户时,都需要输入该名称,但是当我查询所有User对象时,它们所有人的认值都存储在user.name中,并且在管理站点上也显示该值。

我试图通过在save()方法之前添加user.name = name修改管理器,但仍然得到相同的结果。

我的模型。py:

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext_lazy as _

from .managers import CustomUserManager


class User(AbstractUser):
    email = models.EmailField(_('email address'),unique=True,blank=False)
    name = models.CharField(
        _('full name'),max_length=100,blank=False,null=False)
    username = None

    USERNAME_FIELD = 'email'
    NAME_FIELD = 'name'

    def get_full_name(self):
        return self.name.strip().title()

    def get_short_name(self):
        return self.name.title().split()[0]

    def __str__(self):
        return self.get_full_name()

    required_FIELDS = ['name',]

    objects = CustomUserManager()

我的manager.py:

from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _


class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """

    def create_user(self,email,name,password,**extra_fields):
        """
        Create and save a User with the given email,name and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        name = self.name
        user = self.model(email=email,name=name,**extra_fields)
        user.name = name
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self,**extra_fields):
        """
        Create and save a SuperUser with the given email,name and password.
        """
        extra_fields.setdefault('is_staff',True)
        extra_fields.setdefault('is_superuser',True)
        extra_fields.setdefault('is_active',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,**extra_fields)

我想从自定义用户模型中删除名称”字段,并将其添加到将通过与用户的OnetoOne连接创建的Profile模型中,但是如果我能够完成这项工作并离开用户模型中的“名称”字段可避免复杂性并减少代码复杂性。 谢谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。