我有一个DeviceSerializer和DeviceGroupSerializer。 DeviceSerializer将ios字段作为foreignkey,我使用save_ios,创建和更新函数,以便与设备一起保存在数据库中。但我需要再添加一个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()
方法不支持可写默认情况下为嵌套字段。为
编写明确的.update()
方法序列化程序
device_api.serializers.DeviceSerializer
或设置
read_only=True
嵌套序列化程序字段。
当我添加read_only=True
时,没有错误,但创建的组未显示在设备中。