Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DRF:无法使用HyperlinkedEntityField将URL转换为实例_Django_Django Rest Framework - Fatal编程技术网

Django DRF:无法使用HyperlinkedEntityField将URL转换为实例

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

如何使用HyperlinkedIdentifyField将url转换为实例

我有两个嵌套的超链接ModelSerializer:

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()