[英]Django Rest Framework serializer losing data
在我的单元测试中,实际上,我创建的ModelSerializer类似乎丢弃了它提供的一整套数据:
class KeyboardSerializer(serializers.ModelSerializer):
user = serializers.Field(source='user.username')
mappings = KeyMapSerializer(many=True, source='*')
class Meta:
model = Keyboard
fields = ('user', 'label', 'is_primary', 'created', 'last_modified', 'mappings')
def pre_save(self, obj):
obj.user = self.request.user
TEST_KEYBOARD_MAP = {
'user': None,
'label': 'New',
'is_primary': True,
'created': '2013-10-22T12:15:05.118Z',
'last_modified': '2013-10-22T12:15:05.118Z',
'mappings': [
{'cellid': 1, 'key': 'q'},
{'cellid': 2, 'key': 'w'},
]
}
class SerializerTests(TestCase):
def setUp(self):
self.data = TEST_KEYBOARD_MAP
def test_create(self):
serializer = KeyboardSerializer(data=self.data)
print serializer.data
输出:
{'user': u'', 'label': u'', 'is_primary': False, 'created': None, 'last_modified': None, 'mappings': {'id': u'', 'cellid': None, 'key': u''}}
在数据中传递给序列化程序的所有信息会发生什么?
在调用is_valid()
之前,不会填充data
键。 (这是一种数据卫生安全功能,可以阻止您访问输入,直到您确定它是安全的。
添加对is_valid()
的调用,您应该看到您的数据。
虽然您要反序列化,但是要访问object
属性以返回Keyboard
实例。
如果您查看反序列化对象的DRF文档,则会显示您需要的示例:
serializer = CommentSerializer(data=data) serializer.is_valid() # True serializer.object # <Comment object at 0x10633b2d0>
我希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.