Я тестирую сериализатор из rest_framework с помощью django, и я следовал этому официальному учебнику по сериализации rest_framework . Я не понимаю, почему вновь сериализованный объект не может быть десериализован. Как видите, я даже не изменяю свой объект. Я получаю тот же результат, если я заменяю «на».
Вы также можете видеть, что мои данные до и после jsonify абсолютно одинаковы. Я получил тот же результат, если удалить эту часть с помощью «JSON»
У вас есть экспликация? Что не так с моим кодом?
Тест:
ocr_result = OcrResult(ocr_request_id=1, file_id=1)
ocr_result.save()
serialized_ocr_result = OcrResultSerializer(ocr_result)
print('before jsonify: ', serialized_ocr_result.data)
data = JSONRenderer().render(serialized_ocr_result.data)
print('after jsonify: ', data)
stream = io.BytesIO(data)
data = JSONParser().parse(stream)
print('unjsonfy: ', data)
serialized_ocr_result = OcrResultSerializer(data=serialized_ocr_result.data)
print('is valid ', serialized_ocr_result.is_valid())
print('validated items ', serialized_ocr_result.validated_data)
Ouput:
before jsonify: {'id': 1, 'result': '', 'syndic_id': 1, 'copro_id': 1, 'ocr_request': 1, 'file': '1'}
after jsonify: b'{"id":1,"result":"","syndic_id":1,"copro_id":1,"ocr_request":54,"file":1}'
unjsonfy: {'id': 1, 'result': '', 'syndic_id': 1, 'copro_id': 1, 'ocr_request': 54, 'file': 1}
is valid False
validated items {}
Модель:
class OcrResult(models.Model):
ocr_request = models.ForeignKey(OcrRequest, on_delete=models.CASCADE)
result = models.TextField()
file = models.ForeignKey(File, on_delete=models.CASCADE)
syndic_id = models.IntegerField(default=1)
copro_id = models.IntegerField(default=1)
class Meta:
db_table = 'ocr_result'
Сериализатор:
class OcrResultSerializer(serializers.ModelSerializer):
class Meta:
model = OcrResult
fields = '__all__'
def create(self, validated_data):
return OcrResult(**validated_data)