我正在使用django从rest_framework测试序列化程序,我遵循了这个official rest_framework serialization tutorial。我不明白为什么不能对新序列化的对象进行反序列化。如您所见,我什至不修改对象。如果将'替换为',则得到相同的结果。 您还可以看到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)