Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Python AssertionError:`.update()`方法不支持可写嵌套字段_Python_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

Python AssertionError:`.update()`方法不支持可写嵌套字段

Python AssertionError:`.update()`方法不支持可写嵌套字段,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我有一个DeviceSerializer和DeviceGroupSerializer。DeviceSerializer将ios字段作为foreignkey,我使用了save_ios、create和update功能将其与设备一起保存到数据库中。但是我需要再添加一个device_group字段,device_group和device的关系是一对多(一个设备可以在一个组上,但一个组可以有多个设备) 这是我的序列化程序 class DeviceGroupSerializer(serializers.Mo

我有一个DeviceSerializer和DeviceGroupSerializer。DeviceSerializer将ios字段作为foreignkey,我使用了save_ios、create和update功能将其与设备一起保存到数据库中。但是我需要再添加一个device_group字段,device_group和device的关系是一对多(一个设备可以在一个组上,但一个组可以有多个设备)

这是我的序列化程序

class DeviceGroupSerializer(serializers.ModelSerializer):
    name = serializers.StringRelatedField()
    class Meta:
        model = DeviceGroup
        fields = ('name',)

class DeviceSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(source='token', format='hex', read_only=True)
    ios = DeviceIOSerializer(read_only=False, many=True, required=False)
    device_group = DeviceGroupSerializer(required=False)
    class Meta:
        model = Device
        fields = ('id', 'name', 'description', 'ios', 'device_group')

    def save_ios(self, device, ios):
        for io in ios:
            token = io.pop('token', None)
            if token is None:
                DeviceIO.objects.create(device=device, **io)
            else:
                DeviceIO.objects.filter(token=token, device=device).update(**io)

    def update(self, instance, validated_data):
        ios = validated_data.pop('ios',[])
        instance = super(DeviceSerializer, self).update(instance, validated_data)
        if len(ios):
            self.save_ios(instance, ios)
        return instance

    def create(self, validated_data):
        ios = validated_data.pop('ios',[])
        instance = super(DeviceSerializer, self).create(validated_data)
        if len(ios):
            self.save_ios(instance, ios)

        return instance
当我尝试创建一个新组时,我得到以下错误

AssertionError:
.update()
方法不支持可写

默认情况下,nestedfields。为其编写一个显式的
.update()
方法

序列化程序
设备\u api.序列化程序.设备序列化程序
或设置

嵌套序列化程序字段上的
read_only=True


当我添加
read_only=True
时,不会出现错误,但创建的组不会显示在设备中。

嵌套字段是一个打字错误还是一个外部依赖项?嵌套字段是一个打字错误还是一个外部依赖项?