Python AssertionError:`.update()`方法不支持可写嵌套字段
我有一个DeviceSerializer和DeviceGroupSerializer。DeviceSerializer将ios字段作为foreignkey,我使用了save_ios、create和update功能将其与设备一起保存到数据库中。但是我需要再添加一个device_group字段,device_group和device的关系是一对多(一个设备可以在一个组上,但一个组可以有多个设备) 这是我的序列化程序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
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
时,不会出现错误,但创建的组不会显示在设备中。嵌套字段是一个打字错误还是一个外部依赖项?嵌套字段是一个打字错误还是一个外部依赖项?