如何解决我在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 举报,一经查实,本站将立刻删除。