如何序列化Djangomsql的JSON字段

2024-09-28 05:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我将django与django mysql库一起使用,以便能够使用其JSON字段。在

不过,我在为我的模型编写序列化程序时遇到了一个问题。模型如下:

模型.py

from django_mysql.models import JSONField, Model

class PhoneTest(Model):
    data = JSONField()

视图.py

^{pr2}$

序列化程序.py

class PhoneTestSerializer(serializers.ModelSerializer):
    data = serializers.JSONField(binary=True)

    class Meta:
        model = PhoneTest
        fields = ['data']

返回的是一个空对象{}。当然,这是序列化程序的问题。我想我真的可以避免使用它,写一些像:

PhoneTest.objects.create(data=request.data)

但我不确定是不是邦顿。在

编辑

下面是我发布的json的外观:

{'mAutomaticTestCompleted': True, 'mAutomaticTestList': [{'mCountWifiNetworks': 17, 'mName': 'Wifi module', 'mTestStatus': True}, {'mName': 'Bluetooth module', 'mTestStatus': False}, {'mName': 'Battery module', 'mTestStatus': True, 'mValue': -748}, {'mAvailableRamSize': 1036046336, 'mName': 'Memory module', 'mTestStatus': False, 'mTotalRamSize': 1949261824}, {'mAvailableStorageSize': 10391855104, 'mName': 'Internal storage module', 'mTestStatus': True, 'mTotalStorageSize': 11810320384}, {'mAdvancedStatus': True, 'mAvailableEasy': 10391855104, 'mEasyStatusTest': True, 'mName': 'SD card module', 'mTestStatus': True, 'mTotalEasy': 11810320384}, {'mGsmStatus': False, 'mName': 'GSM module', 'mSimStatus': False, 'mTestStatus': False}, {'mName': 'Accelerator module', 'mTestStatus': True, 'mX': 2.49, 'mY': 4.98, 'mZ': 10.34}, {'mName': 'Light Sensor module', 'mTestStatus': True, 'mValue': 145}], 'mDeviceManufacturer': 'Vertex', 'mDeviceModelName': 'Impress_Phonic', 'mGlobalDeviceStatus': False, 'mImei': '097264011583257', 'mMac': '02:00:00:00:00:00', 'mManualTestList': [{'mName': 'Display module', 'mTestStatus': False}, {'mName': 'Back Light module', 'mTestStatus': True}, {'mName': 'Flashlight module', 'mTestStatus': True}, {'mName': 'Headset or jack module', 'mTestStatus': True}, {'mName': 'Receiver module', 'mTestStatus': True}, {'mName': 'Speaker module', 'mTestStatus': True}, {'mName': 'Vibration module', 'mTestStatus': True}], 'mOfficerCode': 'xian', 'mSemiautomaticTestList': [{'mName': 'QR code module', 'mTestStatus': True}, {'mName': 'Buttons module', 'mTestStatus': False}, {'mName': 'Microphone module', 'mTestStatus': True}, {'mCounter': 0, 'mName': 'Multitouch module', 'mTestStatus': True}, {'mName': 'GPS module', 'mTestStatus': True}, {'mName': 'PSensor module', 'mTestStatus': True}, {'mName': 'Touchscreen module', 'mTestStatus': True}], 'mDate': '10/5/2018, 11:05:04 AM'}

Tags: djangopy模型程序falsetruedata序列化
1条回答
网友
1楼 · 发布于 2024-09-28 05:26:35

这条线

serializer = self.serializer_class(data=request.data)

json格式应为

{'data': {'mAutomaticTestCompleted': True, 'mAutomaticTestList': [{'mCountWifiNetworks': 17, 'mName': 'Wifi module', 'mTestStatus': True}, {'mName': 'Bluetooth module', 'mTestStatus': False}, {'mName': 'Battery module', 'mTestStatus': True, 'mValue': -748}, {'mAvailableRamSize': 1036046336, 'mName': 'Memory module', 'mTestStatus': False, 'mTotalRamSize': 1949261824}, {'mAvailableStorageSize': 10391855104, 'mName': 'Internal storage module', 'mTestStatus': True, 'mTotalStorageSize': 11810320384}, {'mAdvancedStatus': True, 'mAvailableEasy': 10391855104, 'mEasyStatusTest': True, 'mName': 'SD card module', 'mTestStatus': True, 'mTotalEasy': 11810320384}, {'mGsmStatus': False, 'mName': 'GSM module', 'mSimStatus': False, 'mTestStatus': False}, {'mName': 'Accelerator module', 'mTestStatus': True, 'mX': 2.49, 'mY': 4.98, 'mZ': 10.34}, {'mName': 'Light Sensor module', 'mTestStatus': True, 'mValue': 145}], 'mDeviceManufacturer': 'Vertex', 'mDeviceModelName': 'Impress_Phonic', 'mGlobalDeviceStatus': False, 'mImei': '097264011583257', 'mMac': '02:00:00:00:00:00', 'mManualTestList': [{'mName': 'Display module', 'mTestStatus': False}, {'mName': 'Back Light module', 'mTestStatus': True}, {'mName': 'Flashlight module', 'mTestStatus': True}, {'mName': 'Headset or jack module', 'mTestStatus': True}, {'mName': 'Receiver module', 'mTestStatus': True}, {'mName': 'Speaker module', 'mTestStatus': True}, {'mName': 'Vibration module', 'mTestStatus': True}], 'mOfficerCode': 'xian', 'mSemiautomaticTestList': [{'mName': 'QR code module', 'mTestStatus': True}, {'mName': 'Buttons module', 'mTestStatus': False}, {'mName': 'Microphone module', 'mTestStatus': True}, {'mCounter': 0, 'mName': 'Multitouch module', 'mTestStatus': True}, {'mName': 'GPS module', 'mTestStatus': True}, {'mName': 'PSensor module', 'mTestStatus': True}, {'mName': 'Touchscreen module', 'mTestStatus': True}], 'mDate': '10/5/2018, 11:05:04 AM'}}

**注意data属性,这在本例中很重要

这就是为什么它不接收你的帖子内容的原因。修改你的有效载荷,它应该能正确地拾起它。在

相关问题 更多 >

    热门问题