Django中使用的内部值序列化方法是什么
我有一些带有foreignKey的模型和带有relatedField的序列化程序。但我有一个错误,即to_internal_值需要首先实现。然而,我不知道这种方法的用途,在网上也找不到任何有用的参考资料。任何解释这一点的帮助都将不胜感激 要更新序列化程序的外部字段,我们使用Django中使用的内部值序列化方法是什么,django,rest,Django,Rest,我有一些带有foreignKey的模型和带有relatedField的序列化程序。但我有一个错误,即to_internal_值需要首先实现。然而,我不知道这种方法的用途,在网上也找不到任何有用的参考资料。任何解释这一点的帮助都将不胜感激 要更新序列化程序的外部字段,我们使用serializer.relatedField,它有两个功能:到\u表示和到\u内部值to_表示法用于修改API的GET body,而to_internal_值用于验证序列化程序的更新请求,例如,它将帮助您检查另一个表中是否存
serializer.relatedField
,它有两个功能:到\u表示
和到\u内部值
to_表示法
用于修改API的GET body,而to_internal_值
用于验证序列化程序的更新请求,例如,它将帮助您检查另一个表中是否存在更新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
希望这能对您有所帮助。请将模型代码添加到问题中。我想说的是,验证应该在
validate\u
方法中执行,而不是直接进入to\u internal\u value()
。顶级验证也应该在validate()
方法中执行。它们都是由的默认实现调用为_internal_value()
,因此覆盖此方法的正确用例是将数据变异为自定义表示。@VladRusu您可以更详细地解释一下吗。我没有完全明白你想说什么?