什么是Django

时间:2016-02-07 18:59:31

标签: django rest

我有一些带有foreignKey的模型和带有relatedField的序列化器。但我有一个错误,说首先需要实现to_internal_value。但是,我不知道使用这种方法,也无法在网上找到任何有用的参考。任何帮助解释这一点是非常感谢。

1 个答案:

答案 0 :(得分:4)

要更新序列化程序的外部字段,我们使用serializer.relatedField,它有两个函数to_representationto_internal_valueto_representation用于修改API的GET正文,to_internal_value用于验证序列化程序的更新请求,例如它可以帮助您检查更新relatedField的请求是否存在于其他表中或者不是那样的事情。

假设我们有两个模型,一个是Foo,另一个是BarFooBar的外键,所以我们需要编写以下序列化程序来验证和更新外国这样的关键。

以下是代码段: -

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

希望这会对你有所帮助。

相关问题