Rest_Framework不验证序列化数据

时间:2019-01-04 16:00:30

标签: json serialization django-rest-framework deserialization

我正在使用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)

0 个答案:

没有答案