django中的to_internal_value和to_representation

要更新序列化程序的外部字段,我们使用serializer.relatedField,它有两个函数to_representation和to_internal_value 。 to_representation用于修改API的GET主体, to_internal_value用于验证序列化程序的更新请求,例如,它将帮助您检查更新relatedField的请求是否存在于其他表中或不存在。
假设我们有两个模型,一个是Foo ,另一个是Bar和Foo是Bar外键,因此我们需要编写以下序列化程序来验证和更新外键。
这是代码片段: -

class FooField(serializers.RelatedField):

    def to_representation(self, obj):
        return {
            'id': obj.id,
            'name': obj.name,
        }

    def to_internal_value(self, data):
        try:
            try:
                obj_id = data['id']
                return Obj.objects.get(id=obj_id)
            except KeyError:
                raise serializers.ValidationError(
                    'id is a required field.'
                )
            except ValueError:
                raise serializers.ValidationError(
                    'id must be an integer.'
                )
        except Obj.DoesNotExist:
            raise serializers.ValidationError(
            'Obj does not exist.'
            )

class BarSerializer(ModelSerializer):
    foo = FooField(
        queryset=Foo.objects.all()
    )
    class Meta:
        model = Bar
上一篇:django to_representation 日期字符串转时间戳返回


下一篇:南大《软件分析》——Intermediate Representation