Мы создали обычай UserDetailsSerializer
, но при попытке запуска приложения мы получаем ошибку:AttributeError при использовании пользовательских UserDetailsSerializer в Джанго-Rest-AUTH
AttributeError: module 'path.to.serializers' has no attribute 'MPUserDetailsSerializer'
Полная ошибка является pasted here.
Установка для REST_AUTH_SERIALIZERS
и USER_DETAILS_SERIALIZER
в настройках Джанго является:
REST_AUTH_SERIALIZERS = {
'LOGIN_SERIALIZER': 'questions.serializers.LoginSerializer',
'JWT_SERIALIZER' : 'questions.serializers.JWTSerializer',
'USER_DETAILS_SERIALIZER' : 'questions.serializers.MPUserDetailsSerializer',
}
Обычай сериализатору является:
from rest_auth import serializers as auth_serializers
class MPUserDetailsSerializer(auth_serializers.UserDetailsSerializer):
"""
User model w/o password
"""
class Meta:
model = User
fields = ('pk', 'username', 'email', 'name')
read_only_fields = ('username',)
def validate_email(self, email):
email = get_adapter().clean_email(email)
if allauth_settings.UNIQUE_EMAIL:
if email and email_address_exists(email):
raise serializers.ValidationError(
_("A user is already registered with this e-mail address."))
return email
Обходной, что мы сделали, чтобы удалить следующие строки из нашего местного virtualenv
, в файле /lib/python3.5/site-packages/rest-auth/serializers.py
:
# Required to allow using custom USER_DETAILS_SERIALIZER in
# JWTSerializer. Defining it here to avoid circular imports
rest_auth_serializers = getattr(settings, 'REST_AUTH_SERIALIZERS', {})
JWTUserDetailsSerializer = import_callable(
rest_auth_serializers.get('USER_DETAILS_SERIALIZER', UserDetailsSerializer)
)
И заменив JWTUserDetailsSerializer
на UserDetailsSerializer
в том же файле.
Я знаю, что изменить код третьих сторон не является хорошей практикой, и не имеет смысла специально удалять строки, которые, как говорят, необходимы для разрешения пользовательских USER_DETAILS_SERIALIZER
, но мы не знаем, что делать с заставить его работать, мы что-то упускаем? может быть, конфигурация?
Мы используем Джанго v1.10.1, djangorestframework v3.4.7 и Джанго-отдых-AUTH v0.9.0
Думаю, вам будет проще ответить на ваш вопрос, если вы включите конфигурацию 'REST_AUTH_SERIALIZERS' и усеченную версию вашего пользовательского определения сериализатора. Это также было бы намного менее сбивающим с толку, если бы вы назвали свой пользовательский что-то другое, кроме 'UserDetailsSerializer'. –
спасибо @GrishaLevit, я только что обновил вопрос, указав дополнительную информацию об этом и изменив имя сериализатора –