0

Мы создали обычай 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

+0

Думаю, вам будет проще ответить на ваш вопрос, если вы включите конфигурацию 'REST_AUTH_SERIALIZERS' и усеченную версию вашего пользовательского определения сериализатора. Это также было бы намного менее сбивающим с толку, если бы вы назвали свой пользовательский что-то другое, кроме 'UserDetailsSerializer'. –

+0

спасибо @GrishaLevit, я только что обновил вопрос, указав дополнительную информацию об этом и изменив имя сериализатора –

ответ

0

Это был вопрос от django-rest-auth исправлено в последней версии - 0.9.1

К см. больше, check this issue.