Получить имя пользователя с django profileserializer - PullRequest
0 голосов
/ 17 февраля 2020

Я разработал API с django. Я создал структуру кода, как показано ниже. Как получить имя и фамилию пользователя в классе ProfileSerializer?

, то есть с помощью ProfileSerializer я хочу получить такую ​​информацию, как имя пользователя, фамилия, идентификационный номер

``

from django.contrib.auth.models import User
from django.contrib.auth.password_validation import validate_password
from rest_framework.serializers import ModelSerializer, Serializer
from rest_framework import serializers
from account.models import Profile

class ProfileSerializer(ModelSerializer):

    class Meta:
        model = Profile
        fields = ('id', 'userKey', 'phone', 'email', 'address', 'userState')

class UserSerializer(ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'profile')

    def update(self, instance, validated_data):
        profile = validated_data.pop('profile')
        profile_serializer = ProfileSerializer(instance=instance.profile, data=profile)
        profile_serializer.is_valid(raise_exception=True)
        profile_serializer.save()
        return super(UserSerializer, self).update(instance, validated_data)

``

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Просто определите serializers.CharField() как,

class ProfileSerializer(ModelSerializer):
    <b>first_name = serializers.CharField(source='user.first_name', read_only=True)
    last_name = serializers.CharField(source='user.last_name' read_only=True)</b>

    class Meta:
        model = Profile
        fields = ('id', 'userKey', 'phone', 'email',
                  'address', 'userState', <b>'first_name', 'last_name'</b>)
0 голосов
/ 17 февраля 2020

Просто измените ваш сериализатор следующим образом

class ProfileSerializer(ModelSerializer):

    class Meta:
        model = Profile
        fields = ('id', 'userKey', 'phone', 'email', 'address', 'userState')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data.update({'username': instance.userKey.username, 'first_name': instance.userKey.first_name, 'last_name': instance.userKey.last_name})
        return data
...