我正在使用带有默认用户表的Django Rest Framework身份验证系统。在该表中,它在两个不同的字段中分割名字和姓氏。
是否可以在序列化程序中加入这两个字段?像这样:
class UserSerializer(serializers.ModelSerializer):
full_name = serializers.CharField(source='user.first_name' + ' ' + 'user.last_name')
所以我会得到以下回复:
{
full_name: "firs_name last_name"
}
答案 0 :(得分:15)
您可以在序列化程序中创建方法并按SerializerMethodField
class UserSerializer(serializers.ModelSerializer):
full_name = serializers.SerializerMethodField()
def get_full_name(self, obj):
return '{} {}'.format(obj.first_name, obj.last_name)
答案 1 :(得分:0)
如果 full_name
是只读字段,@Ivan semochkin 的回答有效,但在我的情况下,我允许用户设置全名,因此必须创建自定义字段,并且在两种情况下都适用。
class FullNameField(serializers.Field):
def to_representation(self, value):
return value.get_full_name()
def to_internal_value(self, full_name):
fname, lname = full_name.split(' ')
ret['first_name'] = fname
ret['last_name'] = lname
return ret
现在将此字段包含在您的序列化程序中。
class UserSerializer(serializers.ModelSerializer):
full_name = FullNameField(source='*')