I'm trying to write a nested serializer for User and Profile models and I'm following this example:
class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'email', 'profile')
def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user
But Im getting this error:
{
"profile": {
"user": [
"This field is required."
]
}
}
I even tried to add it to validation exceptions, like this:
def get_validation_exclusions(self):
exclusions = super(ProfileSerializer,
self).get_validation_exclusions()
return exclusions + ['user']
I think I solved it by adding this:
user = serializers.ModelField(model_field=Profile()._meta.get_field(
'user'), required=False)
But I'm not sure yet.
Set user field from ProfileSerializer as read-only (or simply remove)
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('user', 'gender', 'phone', ...)
read_only_fields = ('user',)
class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'email', 'profile')
def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user
Leave the UserSerializer intact and you will not getting this error any more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With