Django DRF-序列化对象中的OrderedDict

Django DRF-序列化对象中的OrderedDict,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,让Django rest框架正确序列化嵌套的ModelSerializer时遇到问题。嵌套序列化程序在父JSON对象内成为OrderedDict 我已经使用了Meta.depth值,但它似乎没有任何区别 单独创建FileTypeSerializer将生成格式正确的JSON对象 有什么建议吗 序列化程序: class FileTypeSerializer(serializers.ModelSerializer): class Meta: model = FileType

让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)
测试:

结果:

(Pdb) serializer.data
{'owner': 185, 'filetype': OrderedDict([('id', 8855), ('name', u'dFokZyReaOcwCDjAVwxGYhZNVpgOZKeaKRaMWKKHxIDZxceUWr'), ('description', u'ZNOCugfyRaWPGGmfoqZEzoBLknRBVdXyXgYwIFKBJAVuQQKppTiGVMKfgjcjCiUlzmNGFLNQiHIiCEIpydCCtfoWnqrgKOlTZXfUeYLKZgNatsxrRXyWkAEkZmfBjvFFPXcBRshcqIyHMxgHjGjCDBPLJZnEevUXIRAfBnJiLQyHblHONZllglgXhzashLqCvzmNitfN')]), 'datafile': None, 'id': 4960, 'created': '2016-04-21'}
编辑

(Pdb) lines
['--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="id"', '', '814', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="owner"', '', '193', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'id', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'name', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'description', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="created"', '', '2016-04-21']
(Pdb) data
{'owner': 193, 'filetype': OrderedDict([('id', 1335), ('name', u'YdmXrMnxeXjzKxYhlLgaGClqTVMbTJIeMvWvQRLWUsVHWQQbFL'), ('description', u'YrmwBkwFhXGqWCNCjUIQdnBHaPQXqAhIXnOaycknMzFZPjWrWtrhYbWYBKdYDJWnRntPNjQranWjbwdBJPnKPLxAbWInfOrGZyGwDaMvlWCVMmylwxzPxCtMRkYJfuetQnvdbcheXQiRWqzFNfrKrWlcpSakmCmxFdsYBjnlxLByfulBBdiGqRdjOvkMxiUWDxasEgdT')]), 'datafile': None, 'id': 814, 'created': '2016-04-21'}
对不起,应该更具体地说明实际问题是什么。问题是

response = self.client.post(url, serializer.data, format='multipart')
表示“filetype”是必填字段-即它没有正确地jsonified或其他

encode\u multipart

(Pdb) lines
['--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="id"', '', '814', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="owner"', '', '193', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'id', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'name', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="filetype"', '', 'description', '--BoUnDaRyStRiNg', 'Content-Disposition: form-data; name="created"', '', '2016-04-21']
(Pdb) data
{'owner': 193, 'filetype': OrderedDict([('id', 1335), ('name', u'YdmXrMnxeXjzKxYhlLgaGClqTVMbTJIeMvWvQRLWUsVHWQQbFL'), ('description', u'YrmwBkwFhXGqWCNCjUIQdnBHaPQXqAhIXnOaycknMzFZPjWrWtrhYbWYBKdYDJWnRntPNjQranWjbwdBJPnKPLxAbWInfOrGZyGwDaMvlWCVMmylwxzPxCtMRkYJfuetQnvdbcheXQiRWqzFNfrKrWlcpSakmCmxFdsYBjnlxLByfulBBdiGqRdjOvkMxiUWDxasEgdT')]), 'datafile': None, 'id': 814, 'created': '2016-04-21'}
因此,似乎没有对文件类型键的值进行编码。

使用此选项

filetype = FileTypeSerializer(allow_empty_file=True,required=False)

那么,有什么问题?在对象上调用
json.dumps(serializer.data)
后,顺序将被忘记(与大多数数据类型相同)。很抱歉,我不清楚这一点。我更新了原来的帖子。