Django-rest-framework Custom Serializer's output



使用以下模型和序列化程序:

class Person(models.Model):
    name = models.CharField(max_length=30)

class PersonSerializer(serializers.Serializer):
    class Meta:
        model = User
        fields = ('name',)

我得到:

[
   {"name": "Jon"},
   {"name": "Joe"},
   {"name": "Jim"}
]

如何自定义序列化程序,使其输出如下内容:

{
  "out": [
    {"name": "Jon"},
    {"name": "Joe"},
    {"name": "Jim"}
  ],
  "message": "success"
}

这里message是在运行时构建的,否则我可以用 JSONRenderer 对其进行硬编码。

您尚未真正指定对此消息需要哪种类型的控件,或者您希望能够在何处定义它(在序列化程序级别,视图级别?

您始终可以像这样重写调度方法(MySimpleView视图类):

def dispatch(self, request, *args, **kwargs):
    response = super(MySimpleView, self).dispatch(request, *args, **kwargs)
    data = {}
    data['out'] = response.data
    data['message'] = "My message"
    response.data = data
    return response

我假设您想根据响应状态控制自定义消息,因此这似乎是一个完美的地方,因为调度方法返回响应本身。

所以现在只需把它做成一个很好的混合,并在你的视图中重用它。

但是,如果您不需要响应状态,那么自定义渲染器就是您的最佳选择。

相关内容

最新更新