Я использую django вместе с библиотекой django-mysql, чтобы иметь возможность использовать ее поле JSON.
Однако у меня проблема с написанием сериализатора для моей модели. Вот модель:
models.py
from django_mysql.models import JSONField, Model
class PhoneTest(Model):
data = JSONField()
views.py
class PhoneTestView(viewsets.ViewSet):
serializer_class = PhoneTestSerializer
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
print('data is valid: {}'.format(serializer.data))
print('saving to a db...')
serializer.save()
else:
print('data is not valid: {}'.format(serializer.data))
return Response(serializer.data, status=status.HTTP_200_OK)
serializers.py
class PhoneTestSerializer(serializers.ModelSerializer):
data = serializers.JSONField(binary=True)
class Meta:
model = PhoneTest
fields = ['data']
Возвращается пустой объект {}
. Конечно, это проблема с сериализатором. Я думаю, что я действительно мог бы избежать его использования и написать что-то вроде:
PhoneTest.objects.create(data=request.data)
Но я не уверен, что это приятная тонна.
EDIT
вот как выглядит 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'}