Как сериализовать расширенную модель в Django
Я расширяю пользователя django auth в модели Profile:
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
activity = models.IntegerField(default=500)
def _str_(self):
return self
В моих представлениях я получаю текущего пользователя auth и хочу вернуть его профиль:
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def getUserProfile(request):
user= request.user # this will give us the current authenticated user
serializer = profileSerializer(user, many=False) #here I know that I must enter a user + activity but I don't know how (it is the place from what I'm getting the error)
return Response(serializer.data)
Вот мой код сериализаторов:
from rest_framework import serializers
from .models import Profile
class profileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('__all__')
Я думал сохранять новый профиль в db каждый раз, когда пользователь регистрируется, но я использую только вход с внешнего сервера (LDAP) и мой код входа :
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
data = super().validate(attrs)
data['username'] = self.user.username
data['first_name'] = self.user.first_name
data['last_name'] = self.user.last_name
#data['activity'] = self.user.activity (it won't work because self.user is the auth user not the profile )
return data
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
urls.py :
from django.urls import path
from .views import getUserProfile
urlpatterns = [
path('users/login/',views.MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('users/profile/',getUserProfile, name='UserProfile'),#authenticated
]