django-rest-framework自定义序列化程序的输出

时间:2014-11-27 21:01:29

标签: python django django-rest-framework

使用以下型号和序列化器:

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中对其进行硬编码。

1 个答案:

答案 0 :(得分:2)

您还没有真正指定您对此消息需要什么类型的控件,或者您希望能够在何处定义它(在序列化程序级别,视图级别?)。

您始终可以覆盖此调度方法(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

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

所以现在只需将它变成一个漂亮的mixin并在你的视图中重用它。

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