Как показать пользователя в TokenSerializer dj-rest-auth
Я пытаюсь вернуть UserSerializer после успешного входа в систему через dj-rest-auth.
Я выполнил все шаги, которые были описаны в После входа в систему с помощью `rest-auth`, как вернуть дополнительную информацию? в котором есть похожая проблема, но он по-прежнему не показывает информацию о пользователе после входа.
что я получаю после успешного входа в систему
REST_AUTH_SERIALIZERS = {
'TOKEN_SERIALIZER': 'blink.user.serializers.TokenSerializer',
'USER_DETAILS_SERIALIZER': 'blink.user.serializers.UserSerializer'
}
#settings.py
class UserSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
exclude_fields = kwargs.pop('exclude_fields', None)
super(UserSerializer, self).__init__(*args, **kwargs)
if self.context and 'view' in self.context and self.context['view'].__class__.__name__ == 'UsersView':
exclude_fields = ['subscription', 'avatar', 'file']
if exclude_fields:
for field_name in exclude_fields:
self.fields.pop(field_name)
class Meta:
fields = ('id', 'username', 'email', 'last_login', 'first_name', 'last_name')
model = User
class TokenSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = TokenModel
fields = '__all__'
#User.serializers.py
class TokenSerializer(serializers.ModelSerializer):
user = UserSerializer()
email = serializers.EmailField(source='user.email', read_only=True)
full_name = serializers.CharField(source='user.get_full_name', read_only=True)
class Meta:
model = TokenModel
fields = ['key', 'created', 'user', 'email', 'full_name']
Вот как можно показать, если вы хотите отобразить некоторые поля. Убедитесь, что ваш TokenModel
связан с User model
Я решил свою проблему, единственная проблема была с моим settings.py
dj-rest-auth изменил способ настройки сериализатора токенов, начиная с версии 3.0.0, он отлично работает и в последней версии (6.0.0)
REST_AUTH = {
'TOKEN_SERIALIZER': 'blink.user.serializers.TokenSerializer',
'USER_DETAILS_SERIALIZER': 'blink.user.serializers.UserSerializer',
вместо , который работал только для dj-rest-auth <= 2.2.8 версии
REST_AUTH_SERIALIZERS = {
'TOKEN_SERIALIZER': 'blink.user.serializers.TokenSerializer',
'USER_DETAILS_SERIALIZER': 'blink.user.serializers.UserSerializer'
}