Добавление расширенных полей класса пользователя к данным полезной нагрузки в маркере доступа

Я расширил свой класс пользователя, чтобы включить другие поля (город, страна, биография). Я хотел бы передать их вниз, чтобы настроить мой JWT access_token на включение этих полей в качестве полезной нагрузки в дополнение к username.

Вот что у меня есть в моем models.py (расширяющем мой класс пользователя):

from django.db import models
from django.contrib.auth.models import User

#extending user model to include
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=50,blank=True)
    country = models.CharField(max_length=50, blank=True)
    bio = models.CharField(max_length=500, blank=True)
    def __str__(self):
        return self.user.username

serializers.py:

#changed from serializers.HyperLinked to ModelSerializer
class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        #removed url from fields
        fields = ['username', 'email', 'password', 'first_name', 'last_name', 'city', 'country', 'bio']
        extra_kwargs = {
            'password': {'write_only': True},
        }
        def create(self,validated_data):
            user = Profile.objects.create_user(
                                            username=validated_data['username'],
                                            first_name=validated_data['first_name'],
                                            last_name=validated_data['last_name'],
                                            city=validated_data['city'],
                                            country=validated_data['country'],
                                            bio=validated_data['bio'],
                                            email=validated_data['email'])
            user.set_password(validated_data['password'])
            user.save()
            return user

#customizing the payload we get from our access tokens
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)
        token['username'] = user.username
        token['first_name'] = user.first_name
        token['last_name'] = user.last_name
        token['country'] = user.profile.country
        token['city'] = user.profile.city
        token['bio'] = user.profile.bio
        return token

и api.py

#Register API
class RegisterApi(generics.GenericAPIView):
    serializer_class = RegisterSerializer
    #remove this if it doesn't work
    authentication_classes = (TokenAuthentication,)
    permission_classes = (AllowAny,)
    def post(self, request, *args,  **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "message": "User Created Successfully.  Now perform Login to get your token",
        })

При попытке войти в систему сейчас я получаю сообщение об ошибке:

AttributeError at /api/token/
'User' object has no attribute 'profile'
Request Method: POST
Request URL:    http://127.0.0.1:8000/api/token/
Вернуться на верх