我试图使用rest-auth提供的序列化器来定义端点/rest-auth/user /的GET(*with headers)用户详细信息
(*with headers(Content-Type:application/json授权:Token 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'
在这里,他们正在序列化 djang.contrib.auth.User
在您的情况下,您使用的是自定义用户模型,并且模型中没有usernam字段,因此在尝试序列化字段用户名时出错.因此,您必须为User模型编写序列化程序并添加路径到您的设置:
例如:
class CustomUserDetailsSerializer(serializers.ModelSerializer): class Meta: model = MyUser fields = ('email',) read_only_fields = ('email',)
在settings.py中
USER_DETAILS_SERIALIZER = CustomUserDetailsSerializer