Reputation: 221
Is there any way to create serializer not model writable field from model two fields? Here is my Serializer
class UserProfileSerializer(serializers.ModelSerializer):
full_name = ?
class Meta:
model = users.models.User
fields = (
'phone_number',
'email',
'city',
'full_name'
)
I want to connect firts_name and last_name into full_name
Upvotes: 0
Views: 540
Reputation: 1714
You can use serializers.CharField()
with write_only
attribute;
class UserProfileSerializer(serializers.ModelSerializer):
full_name = serializers.CharField(max_length=225, write_only=True,
required=False, allow_null=True)
class Meta:
model = users.models.User
fields = (
'phone_number',
'email',
'city',
'full_name'
)
then you will be able to send json data like;
{
"phone_number": "123456789",
"email": "[email protected]",
"city": "Foo",
"full_name": "My Full Name"
}
and for getting that value after serializer.is_valid()
method;
full_name = serializer.validated_data.get('full_name', '')
# full_name --> My Full Name
Upvotes: 2
Reputation: 5452
You can use a SerializerMethodField
to construct the full_name from first_name + last_name:
from rest_framework import serializers
class UserProfileSerializer(serializers.ModelSerializer):
full_name = serializers.SerializerMethodField()
class Meta:
model = users.models.User
fields = (
'phone_number',
'email',
'city',
'full_name'
)
def get_full_name(self, instance):
return "{} {}".format(instance.first_name, instance.last_name)
Upvotes: 1