在Django Rest Framework Serializer中合并两个字段

时间:2016-09-08 09:51:55

标签: django django-rest-framework

我正在使用带有默认用户表的Django Rest Framework身份验证系统。在该表中,它在两个不同的字段中分割名字和姓氏。

是否可以在序列化程序中加入这两个字段?像这样:

class UserSerializer(serializers.ModelSerializer):
    full_name = serializers.CharField(source='user.first_name' + ' ' + 'user.last_name')

所以我会得到以下回复:

{
    full_name: "firs_name last_name"
}

2 个答案:

答案 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='*')