django – DRF – 序列化对象中的OrderedDict
发布时间:2020-12-20 13:11:39 所属栏目:Python 来源:网络整理
导读:我遇到了让Django rest框架正确序列化嵌套ModelSerializer的问题.嵌套的序列化程序成为父 JSON对象中的OrderedDict. 我玩过Meta.depth值,但它似乎没有任何区别. 单独创建FileTypeSerializer将导致正确形成的JSON对象. 有什么建议? 串行器: class FileTypeS
我遇到了让Django rest框架正确序列化嵌套ModelSerializer的问题.嵌套的序列化程序成为父
JSON对象中的OrderedDict.
我玩过Meta.depth值,但它似乎没有任何区别. 单独创建FileTypeSerializer将导致正确形成的JSON对象. 有什么建议? 串行器: class FileTypeSerializer(serializers.ModelSerializer): class Meta: model = FileType class FileUploadSerializer(serializers.ModelSerializer): owner = serializers.SlugRelatedField( read_only=True,slug_field='id' ) filetype = FileTypeSerializer() class Meta: model = FileUpload read_only_fields = ('created','datafile','owner','filetype') depth = 1 工厂: class FileTypeFactory(factory.DjangoModelFactory): class Meta: model = FileType id = fuzzy.FuzzyInteger(1,9999) name = fuzzy.FuzzyText(length=50) description = fuzzy.FuzzyText(length=200) class FileUploadFactory(factory.DjangoModelFactory): class Meta: model = FileUpload id = fuzzy.FuzzyInteger(1,9999) filetype = factory.SubFactory(FileTypeFactory) owner = factory.SubFactory(UserFactory) 测试: fuf = FileUploadFactory() serializer = FileUploadSerializer(instance=fuf,context=serializer_context) import pdb; pdb.set_trace() 结果: (Pdb) serializer.data {'owner': 185,'filetype': OrderedDict([('id',8855),('name',u'dFokZyReaOcwCDjAVwxGYhZNVpgOZKeaKRaMWKKHxIDZxceUWr'),('description',u'ZNOCugfyRaWPGGmfoqZEzoBLknRBVdXyXgYwIFKBJAVuQQKppTiGVMKfgjcjCiUlzmNGFLNQiHIiCEIpydCCtfoWnqrgKOlTZXfUeYLKZgNatsxrRXyWkAEkZmfBjvFFPXcBRshcqIyHMxgHjGjCDBPLJZnEevUXIRAfBnJiLQyHblHONZllglgXhzashLqCvzmNitfN')]),'datafile': None,'id': 4960,'created': '2016-04-21'} 编辑 对不起,应该更具体地说明实际问题是什么.问题是来自的回应 response = self.client.post(url,serializer.data,format='multipart') 他说“文件类型”是一个必填字段 – 即它没有被正确地弄糊涂或其他东西. 深入研究post(来自django.test.Client)的代码,在encode_multipart中 (Pdb) lines ['--BoUnDaRyStRiNg','Content-Disposition: form-data; name="id"','','814','--BoUnDaRyStRiNg','Content-Disposition: form-data; name="owner"','193','Content-Disposition: form-data; name="filetype"','id','name','description','Content-Disposition: form-data; name="created"','2016-04-21'] (Pdb) data {'owner': 193,1335),u'YdmXrMnxeXjzKxYhlLgaGClqTVMbTJIeMvWvQRLWUsVHWQQbFL'),u'YrmwBkwFhXGqWCNCjUIQdnBHaPQXqAhIXnOaycknMzFZPjWrWtrhYbWYBKdYDJWnRntPNjQranWjbwdBJPnKPLxAbWInfOrGZyGwDaMvlWCVMmylwxzPxCtMRkYJfuetQnvdbcheXQiRWqzFNfrKrWlcpSakmCmxFdsYBjnlxLByfulBBdiGqRdjOvkMxiUWDxasEgdT')]),'id': 814,'created': '2016-04-21'} 所以似乎没有编码文件类型键的值. 解决方法
用这个
filetype = FileTypeSerializer(allow_empty_file=True,required=False) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |