Переопределение UserDetailsSerializer в django-rest-auth - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь изменить UserDetailsSerializer с настроенной пользовательской информацией, но когда сервер работает, он выдает ошибку «Объект« Пользователь »не имеет атрибута« пользователь »».Я перепробовал много методов, и ни один из них не работает.

Мой код:

mode.py

class userProfileModel(models.Model):

GENDER = [
    ('', ""),
    ('M', "Male"),
    ('F', "Female")
]

user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE, default='')
age = models.DateField(auto_now_add=True)
gender = models.CharField(max_length=10, choices=GENDER, default='')
phone = models.IntegerField(default=0)
user_is_active = models.BooleanField(default=False)

def __str__(self):
    return self.user.username

И serializers.py

from rest_auth.serializers import UserDetailsSerializer
from rest_framework import serializers

from .models import userProfileModel


class Profile(serializers.ModelSerializer):
    user = UserDetailsSerializer()
    class Meta:
        model = userProfileModel
        fields = ('user',)


class UserDetailsSerializer(UserDetailsSerializer):
    profile = Profile(many=True)

    class Meta(UserDetailsSerializer.Meta):
        fields = UserDetailsSerializer.Meta.fields + ('profile',)
        read_only_fields = ('',)

И settings.py

REST_AUTH_SERIALIZERS = {
'USER_DETAILS_SERIALIZER': 'app.serializers.UserDetailsSerializer',
}

Когда я запускаю этот код, он выдает эту ошибку.

Получил AttributeError при попытке получить значение для поля profile на сериализаторе UserDetailsSerializer.Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре User.Исходный текст исключения был: объект «Пользователь» не имеет атрибута «профиль».

1 Ответ

0 голосов
/ 21 декабря 2018

используйте source='userprofile' как

class UserDetailsSerializer(UserDetailsSerializer):
    <b>profile = Profile(source='userprofile')</b>

    class Meta(UserDetailsSerializer.Meta):
        fields = UserDetailsSerializer.Meta.fields + ('profile',)
        read_only_fields = ('',)

С User и userProfileModel в OneToOne отношение, вы не хотите указывать аргумент many=True в сериализаторе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...