Django DRF:无法使用HyperlinkedEntityField将URL转换为实例
如何使用HyperlinkedIdentifyField将url转换为实例 我有两个嵌套的超链接ModelSerializer:Django DRF:无法使用HyperlinkedEntityField将URL转换为实例,django,django-rest-framework,Django,Django Rest Framework,如何使用HyperlinkedIdentifyField将url转换为实例 我有两个嵌套的超链接ModelSerializer: class ChildSerializer(HyperlinkedModelSerializer): class Meta: model = Child fields = ('url', 'name') extra_kwargs = { 'name': {'required': False
class ChildSerializer(HyperlinkedModelSerializer):
class Meta:
model = Child
fields = ('url', 'name')
extra_kwargs = {
'name': {'required': False}
}
class ParentSerializer(HyperlinkedModelSerializer):
class Meta:
model = Parent
fields = ('url', 'child')
但这不起作用:
>>> s = ParentSerializer(data={'child': {'url': '<valid url>'}})
>>> s.is_valid()
True
>>> s.validated_data()
OrderedDict([('child', OrderedDict())])
但我觉得必须有一种机制来从我这里缺少的有效URL中检索对象…to\u internals\u value的传统行为是返回本机数据类型。然而,按照您的计算方式,这是一种常见的做法,也是重写和返回instance@Dap从url到实例是否有更直接的方法,虽然?可能误解了您的问题,但我想说不,您将数据序列化到实例的做法非常常见,甚至django rest serialize也在幕后完成了这项工作。值的传统行为是返回本机数据类型。然而,按照您的计算方式,这是一种常见的做法,也是重写和返回instance@Dap从url到实例是否有更直接的方法,虽然?可能误解了您的问题,但我想说不,您将数据序列化到实例的做法非常常见,甚至django rest serialize也在幕后完成了这项工作。
class ChildSerializer(HyperlinkedModelSerializer):
...
def to_internal_value(self, data):
pk = parse_pk_from_url(data['url'])
return self.Meta.model.objects.filter(pk=pk).get()