加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读