[英]django.core.exceptions.FieldDoesNotExist: BuildingAddress has no field named 'False'
[英]django.core.exceptions.FieldDoesNotExist: User has no field named 'username'
我正在尝试自定义 Django 的 AbstractUser。 当我尝试将username
重置为None
时,出现以下异常:
"django.core.exceptions.FieldDoesNotExist: User has no field named 'username'".
这是我的代码:
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
if not email:
raise ValueError("L'adresse e-mail donnée doit etre definie")
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, **extra_fields):
extra_fields.setdefault("is_staff", False)
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(AbstractUser):
username = None
email = models.EmailField('email adress', unique=True)
telephone = models.CharField(max_length=20)
REQUIRED_FIELDS = []
我该怎么做才能解决这个问题?
如果您在项目中使用 django-allauth,这也可能导致。要解决此问题,您需要在 settings.py 中将 ACCOUNT_USER_MODEL_USERNAME_FIELD 定义为 None。 有关更多信息,请参阅此问题和allauth 文档。
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
您尚未在代码中为USERNAME_FIELD
设置值。 这必须设置为唯一标识用户实例的字段。 AbstractUser
将其设置为'username'
,因此您会收到错误消息。 您可以将其设置为'email'
来解决您的问题:
class User(AbstractUser):
username = None
email = models.EmailField('email adress', unique=True)
telephone = models.CharField(max_length=20)
# set below value
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
将用户名设置为无的原因是什么?
用户模型必须具有唯一字段,如用户名或电子邮件或电话号码以识别用户。
如果您想覆盖用户的模型,您应该提供这样的唯一字段,将其标记为用户名字段并设置 django 设置变量 AUTH_USER_MODEL 定义您的自定义模型。
像这样的东西:
# model
class User(AbstractUser):
username = models.CharField(max_length=32, unique=True) # or something else
...
USERNAME_FIELD = 'username'
# settings
AUTH_USER_MODEL = 'users.User'
如我所见,您想使用 email 进行身份验证:
正如文档所说 [https://django-allauth.readthedocs.io/en/latest/configuration.html]
你必须在设置文件中添加
ACCOUNT_AUTHENTICATION_METHOD ="email"
但首先你必须添加到你的 model
class User(AbstractUser):
username = None
email = models.EmailField('email adress', unique=True)
telephone = models.CharField(max_length=20)
REQUIRED_FIELDS = []
USERNAME_FIELD = "email"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.