我有一些带有foreignKey的模型和带有相关字段的序列化器。但我有一个错误,说需要首先实现 to_internal_value 。不过,我不知道这个方法的用途,在网上也找不到任何有用的引用。任何解释这一点的帮助都非常感激。
最佳答案
要更新序列化器的外部字段,我们使用 serializer.latedField
,它有两个函数:to_representation
和 to_internal_value
。 to_representation
用于修改 API 的 GET 正文,to_internal_value
用于验证序列化器的更新请求,例如,它将帮助您检查请求是否用于更新相关字段是否存在于其他表中以及类似的事情。
假设我们有 2 个模型。一个是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 - Django 中序列化器 to_internal_value 方法的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35257698/