django.core.exceptions.FieldDoesNotExist:用户没有名为“用户名”的字段

YaL*_*ura 5 python django

我正在尝试自定义 django 的 AbstractUser。当我尝试重置usernameNone时,出现以下异常:

\n
"django.core.exceptions.FieldDoesNotExist: User has no field named 'username'".\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的代码:

\n
class UserManager(BaseUserManager):\n    use_in_migrations = True\n\n    def _create_user(self, email, password, **extra_fields):\n        if not email:\n            raise ValueError("L'adresse e-mail donn\xc3\xa9e doit etre definie")\n        email = self.normalize_email(email)\n        user = self.model(email=email, **extra_fields)\n        user.set_password(password)\n        user.save(using=self._db)\n        return user\n\n    def create_user(self, email, password, **extra_fields):\n        extra_fields.setdefault("is_staff", False)\n        extra_fields.setdefault("is_superuser", False)\n        return self._create_user(email, password, **extra_fields)\n\n    def create_superuser(self, email, password, **extra_fields):\n        extra_fields.setdefault("is_staff", True)\n        extra_fields.setdefault("is_superuser", True)\n\n        if extra_fields.get("is_staff") is not True:\n            raise ValueError("Superuser must have is_staff=True")\n        if extra_fields.get("is_superuser") is not True:\n            raise ValueError("Superuser must have is_superuser=True")\n        return self._create_user(email, password, **extra_fields)\n\n\nclass User(AbstractUser):\n    username = None\n    email = models.EmailField('email adress', unique=True)\n    telephone = models.CharField(max_length=20)\n    REQUIRED_FIELDS = []\n
Run Code Online (Sandbox Code Playgroud)\n

我可以做什么来解决这个问题?

\n

小智 12

如果您在项目中使用 django-allauth,也可能会导致这种情况。要解决此问题,您需要在 settings.py 中将 ACCOUNT_USER_MODEL_USERNAME_FIELD 定义为 None。请参阅此问题allauth 文档以获取更多信息。

ACCOUNT_USER_MODEL_USERNAME_FIELD = None
Run Code Online (Sandbox Code Playgroud)

  • 如果它给出“AssertionError”,则使用您的用户名字段而不是“None”,例如。`ACCOUNT_USER_MODEL_USERNAME_FIELD = '电子邮件'` (2认同)

Abd*_*kat 2

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 = []
Run Code Online (Sandbox Code Playgroud)