反序列化JSON时,Django DRF ModelSerializer isvalid()始终为false

时间:2018-03-14 15:13:01

标签: python json django python-3.x serializer

尽管我在这里找到了所有内容,但我没有找到解决问题的方法。

我正在使用django rest框架在Python 3.x上的Pycharm中处理REST API

当我在代码中使用ModelSerializer时,我可以从我的模型中创建一个JSON

self.woodrow_attributes = {'name': 'RankA',
                        'gps_position_x': Decimal('40.15'),
                        'gps_position_y': Decimal('45.50'),
                        'gps_position_z': Decimal('30.50')}


self.woodrow = WoodRow.objects.create(**self.woodrow_attributes)



self.woodrow_serializer = WoodRowSerializer(instance=self.woodrow)


data_json = JSONRenderer().render(self.woodrow_serializer.data,)

我的json很好,包含所有字节类型的信息:

b'{"row_id":1,"name":"RankA","gps_position_x":"40.1500000","gps_position_y":"45.5000000","gps_position_z":"30.5000000"}'

当我想反序列化它并测试内容是否有效时,答案总是错误的。我使用ModelSerializer,当我运行此代码时:

deserialize_data = BytesIO(data_json)
deserialize_data = JSONParser().parse(deserialize_data)
print(deserialize_data)
print(type(deserialize_data))

serializer = WoodRowSerializer(data=deserialize_data)
print(serializer.is_valid())
print(serializer.error_messages)

我明白了:

{'row_id': 1, 'name': 'RankA', 'gps_position_x': '40.1500000', 'gps_position_y': '45.5000000', 'gps_position_z': '30.5000000'}

<class 'dict'>

False

{'required': 'This field is required.', 'null': 'This field may not be null.', 'invalid': 'Invalid data. Expected a dictionary, but got {datatype}.'}

错误说我的数据无效且是数据类型,但我只是打印之前它是dict

当我在python控制台中尝试我的代码时,它可以工作,并且序列化程序可以正确地验证我的数据。

有人有答案吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

序列化程序的

error_messages属性实际上不包含解析数据时实际发生的错误消息。这是静态字典,只是将某些错误映射到人类可读的消息。

您要查找的属性称为errors