Python Django serialization:尝试获取序列化程序上字段的值时发生AttributeError
我得到以下错误 AttributeError:尝试获取序列化程序Python Django serialization:尝试获取序列化程序上字段的值时发生AttributeError,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,我得到以下错误 AttributeError:尝试获取序列化程序解序列化程序上的字段devicedetails的值时,获取了AttributeError。 序列化程序字段的名称可能不正确,并且与设备实例上的任何属性或键都不匹配。 原始异常文本为:“设备”对象没有属性“devicedetails” My models.py:- class DeviceInfo(models.Model): vendor = models.CharField(max_length=250) devi
解序列化程序上的字段devicedetails
的值时,获取了AttributeError。
序列化程序字段的名称可能不正确,并且与设备
实例上的任何属性或键都不匹配。
原始异常文本为:“设备”对象没有属性“devicedetails”
My models.py:-
class DeviceInfo(models.Model):
vendor = models.CharField(max_length=250)
device_type = models.CharField(max_length=250)
modelname = models.CharField(max_length=100)
class Device(models.Model):
name = models.CharField(max_length=100, primary_key=True)
username = models.TextField()
password = EncryptedTextField()
deviceinfo = models.ForeignKey(DeviceInfo, null=True)
class DeviceDetails(models.Model):
device = models.ForeignKey(Device)
serial_number = models.CharField(max_length=100)
version = models.CharField(max_length=100)
serializer.py:-
class DeviceInfoSerializer(serializers.ModelSerializer):
class Meta:
model = DeviceInfo
fields = ("id", "vendor", "device_type", "modelname")
class DeviceSerializer(serializers.ModelSerializer):
class Meta:
model = Device
fields = ("name","username", "password", "deviceinfo")
class DeviceDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = DevieceDetails
fields = ("device", "serial_number", "version")
class DISerializer(serializers.ModelSerializer):
deviceinfo = DeviceInfoSerializer(read_only=True)
devicedetails = DeviceDetailsSerializer(many=True)
class Meta:
model = Device
fields = ("name", "username", "password", "deviceinfo", "devicedetails")
views.py:-
def list(self, request):
list = Device.objects.all()
serializer = DISerializer(list, many=True)
您需要将devicedetails
字段重命名为devicedetails\u set
。自动为填充有\u set
的关系生成反向名称:
devicedetails_set = DeviceDetailsSerializer(many=True)
或者在设备详细信息
设备
字段上使用相关的\u名称
:
device = models.ForeignKey(Device, related_name='devicedetails')
从:
如果尚未为反向关系设置相关名称,则需要在fields参数中使用自动生成的相关名称。例如:轨迹集
您的DISerializer.devicedetails
属性未指定source
参数。这意味着将调用默认行为-在设备
对象上按该名称查找属性。