Rest_Framework не проверяет сериализованные данные - PullRequest
0 голосов
/ 04 января 2019

Я тестирую сериализатор из 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)
...