字段名称“用户名”对模型无效
Field name `username` is not valid for model
我正在尝试使用 rest-auth 提供的序列化程序从定义的 endpoint /rest-auth/user/
中获取(*使用 headers)用户详细信息
(*与 headers
(Content-Type: application/json
授权:令牌 1a5472b2af03fc0e9de31fc0fc6dd81583087523
))
我得到以下追溯:https://dpaste.de/oYay#L
我定义了自定义用户模型(使用电子邮件而不是用户名):
class UserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
user = self.model(
# lower-cases the host name of the email address
# (everything right of the @) to avoid case clashes
email=self.normalize_email(email),
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, **kwargs):
user = self.model(
email=email,
is_staff=True,
is_superuser=True,
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'
email = models.EmailField(unique=True)
设置如下:
AUTH_USER_MODEL = 'users.MyUser'
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
# Config to make the registration email only
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'optional'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
不确定如何纠正此错误.. 使其符合 rest-auth 序列化程序。
在 django-rest-auth 中,用户模型有一个默认的序列化程序:
USER_DETAILS_SERIALIZER = 'rest_auth.views.UserDetailsView'
他们在这里连载django.contrib.auth.User
在您的情况下,您使用的是自定义用户模型并且您的模型中没有用户名字段,因此在尝试序列化字段用户名时出现错误。所以你必须为你的用户模型编写一个序列化程序并添加一个路径到你的设置:
示例:
class CustomUserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = MyUser
fields = ('email',)
read_only_fields = ('email',)
在settings.py
USER_DETAILS_SERIALIZER = CustomUserDetailsSerializer
我正在尝试使用 rest-auth 提供的序列化程序从定义的 endpoint /rest-auth/user/
中获取(*使用 headers)用户详细信息(*与 headers (Content-Type: application/json 授权:令牌 1a5472b2af03fc0e9de31fc0fc6dd81583087523 ))
我得到以下追溯:https://dpaste.de/oYay#L
我定义了自定义用户模型(使用电子邮件而不是用户名):
class UserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
user = self.model(
# lower-cases the host name of the email address
# (everything right of the @) to avoid case clashes
email=self.normalize_email(email),
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, **kwargs):
user = self.model(
email=email,
is_staff=True,
is_superuser=True,
is_active=True,
**kwargs
)
user.set_password(password)
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'
email = models.EmailField(unique=True)
设置如下:
AUTH_USER_MODEL = 'users.MyUser'
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
# Config to make the registration email only
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'optional'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
不确定如何纠正此错误.. 使其符合 rest-auth 序列化程序。
在 django-rest-auth 中,用户模型有一个默认的序列化程序:
USER_DETAILS_SERIALIZER = 'rest_auth.views.UserDetailsView'
他们在这里连载django.contrib.auth.User
在您的情况下,您使用的是自定义用户模型并且您的模型中没有用户名字段,因此在尝试序列化字段用户名时出现错误。所以你必须为你的用户模型编写一个序列化程序并添加一个路径到你的设置:
示例:
class CustomUserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = MyUser
fields = ('email',)
read_only_fields = ('email',)
在settings.py
USER_DETAILS_SERIALIZER = CustomUserDetailsSerializer