python - 在 REST 框架中返回字典而不是数组

标签 python django django-rest-framework

我正在将一组现有 API 从 tastypie 转换为 REST 框架。默认情况下,在执行列表 API 时,tastypie 返回一个包含对象列表的字典和一个元数据字典,而 REST framework 只返回一个对象数组。例如,我有一个名为 Site 的模型。 Tastypie 返回一个看起来像

的字典
{
  "meta": 
    { ... some data here ...}, 
  "site": 
    [
      {... first site...}, 
      {...second site...}
      ...
    ]
}

REST framework 只返回数组

[
  {... first site...}, 
  {...second site...}
  ...
]

我们不会以任何方式使用来自 tastypie 的元数据。在 REST 框架中更改返回值的侵入性最小的方法是什么?我可以覆盖 list(),但我宁愿让 REST 框架尽可能地做它的事情。

最佳答案

我认为您将不得不覆盖 list() 方法。

我们首先得到原始响应。然后我们使用 data 属性设置响应的自定义表示,并返回带有此自定义表示的响应。

class MyModelViewSet(viewsets.ModelViewSet):

    def list(self, request, *args, **kwargs):
        response = super(MyModelViewSet, self).list(request, *args, **kwargs) # call the original 'list'
        response.data = {"site": response.data} # customize the response data
        return response # return response with this custom representation

关于python - 在 REST 框架中返回字典而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306071/

相关文章:

python - 返回字典时的光标并打印键在哪里

Python:如何使用包外的修改版本覆盖包中的一个模块?

python - 如何在不询问用户的情况下存储用户详细信息?

python - Django REST 框架 : get field of related model in serializer

python - 为 Web 应用程序使用的 Python REST API 选择适当的身份验证类

python - pysha3 没有给出正确的答案

python - Django 为每个模型字段设置隐私选项

python - 在多对多字段上订购 django 模型。需要非规范化吗?

python - 为什么我会收到此 PicklingError?

mysql - 是否可以使用 Django Rest Framework 来实现?