Djangorest profile\u data=validated\u data.pop('profile')键错误:“profile”

2024-04-27 13:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserProfile
        fields = ('first_name', 'last_name', 'phone_number', 'age', 'gender')


class UserRegistrationSerializer(serializers.ModelSerializer):

    profile = UserSerializer(required=False)
    
    class Meta:
        model = User
        fields = ('email', 'password', 'profile')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create_user(**validated_data)
        
        UserProfile.objects.create(
            user=user,
            first_name=profile_data['first_name'],
            last_name=profile_data['last_name'],
            phone_number=profile_data['phone_number'],
            age=profile_data['age'],
            gender=profile_data['gender']
        )
        return user

1条回答
网友
1楼 · 发布于 2024-04-27 13:39:29

大家好,欢迎来到StackOverflow

我猜是这样的,因为在UserRegistrationSerializer字段profile不是必需的,您必须管理validated_data中缺少的案例

比如说类似的东西

 def create(self, validated_data):
        # the second param is the default
        profile_data = validated_data.pop('profile', None)  

        user = User.objects.create_user(**validated_data)

        if profile_data:
            UserProfile.objects.create(
                user=user,
                first_name=profile_data['first_name'],
                last_name=profile_data['last_name'],
                phone_number=profile_data['phone_number'],
                age=profile_data['age'],
                gender=profile_data['gender']
            )
        return user

相关问题 更多 >