从 2.3 迁移到 3.0 分页结果在 JSON 中有 OrderedDict

Migrating from 2.3 to 3.0 paginated results have OrderedDict in JSON

我正在尝试将 Django REST Framework 从 2.3.14 升级到 3.0.5 我的功能测试失败了,因为 3.0 没有返回正确的 JSON。

在 2.3 中我得到

{'results': [{'id': 2}, ...

但在 3.0 中 JSON 未正确呈现,留下 OrderedDict

{'results': [OrderedDict([('id', 2), ...

我正在使用 Python 3.4 和 Django 1.6。谁能告诉我需要更改什么才能让渲染器正确渲染?

我断言反对在 2.3 中工作的 response.data。在 3.0 中不再有效,但针对 response.content 的断言确实有效。

self.assertDictEqual(
    json.loads(response.content.decode('utf-8')),
    { ...

与 2.x 相比,DRF 3.x 中的序列化机制略有变化(改进)。

因此 response.data 包含资源(列表或单个项目)的原始序列化 python 表示。如果你想测试与最终渲染表示(JSON)的相等性,你应该使用 response.content(它使用 .data 但也应用配置的渲染器)。