Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 Django serialization:尝试获取序列化程序上字段的值时发生AttributeError_Python_Django_Serialization_Django Rest Framework - Fatal编程技术网

Python Django serialization:尝试获取序列化程序上字段的值时发生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

我得到以下错误

AttributeError:尝试获取序列化程序
解序列化程序
上的字段
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
参数。这意味着将调用默认行为-在
设备
对象上按该名称查找属性。