django - Django 中序列化器 to_internal_value 方法的用途是什么

标签 django rest

我有一些带有foreignKey的模型和带有相关字段的序列化器。但我有一个错误,说需要首先实现 to_internal_value 。不过,我不知道这个方法的用途,在网上也找不到任何有用的引用。任何解释这一点的帮助都非常感激。

最佳答案

要更新序列化器的外部字段,我们使用 serializer.latedField,它有两个函数:to_representationto_internal_valueto_representation 用于修改 API 的 GET 正文,to_internal_value 用于验证序列化器的更新请求,例如,它将帮助您检查请求是否用于更新相关字段是否存在于其他表中以及类似的事情。

假设我们有 2 个模型。一个是Foo,另一个是Bar,而FooBar的外键,所以我们需要写以下序列化器以这种方式验证和更新外键。

这是代码片段:-

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 - Django 中序列化器 to_internal_value 方法的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35257698/

相关文章:

python - 如何在Django generic.ListView中从用户前端获取参数?

python - 从 django 中的文件添加选择

django - 完整性错误 : duplicate key value in django unit test

php - ReSTLer 总是返回未找到

使用 spring-test-mvc 框架的 Spring REST Controller 测试

python - 如何在应用程序的 urls.py 中设置通用 View ?

django - Heroku Django Postgresql 数据库管理员, super 用户在哪里?

rest - Golang gorilla mux REST api 在使用 PUT 和 DELETE 方法时出现 405 错误

rest - 带有 REST API 的开源作业调度程序

用于 REST API (Tomcat) 的 Spring Security Kerberos SSO