如何修改django rest框架发送的响应

时间:2014-11-27 12:43:13

标签: python django angularjs rest django-rest-framework

我使用Django REST as backend和角度作为前端。

我有两个序列化程序,一个用于READE GET请求,另一个用于POST,PUT请求。

这是因为像interval之类的字段很少,我用户输入整数,但在数据库中我保存为timedelta所以我必须多次将它们作为前端的秒数。

所以例如用户输入了interval = 5,我将5*60*60发布到服务器。

为了阅读我已经ReadSerializer我正在潜水60 * 60再向用户显示他添加的内容。

这是有用的发现我的问题是在将我的对象保存到数据库后,djnago rest frameework发送保存的对象interval = 5*60*60。 inerval只是一个例子,在发布

之前我在前端更改它们的4-5个

是否有任何回复使用我的READ serializer before sending

class Serializer(serializers.ModelSerializer):
    interval = serializers.SerializerMethodField('get_interval')

    class Meta:
        model = User
        fields = ('id', 'interval')

    def get_interval(self, obj):
        return obj.interval/60*60

class WriteSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'interval')

这是视图

class UserListCreateView(generics.ListCreateAPIView):
    queryset = User.objects.filter(is_deleted=False)

    def get_serializer_class(self):
        if self.request.method == 'GET':
            return ReadSerializer
        return WriteSerializer

1 个答案:

答案 0 :(得分:3)

您可以使用transform_field方法,该方法允许您在显示字段时自定义字段的表示形式。

有关它的文档:http://www.django-rest-framework.org/api-guide/serializers/#customizing-field-representation

顺便说一下,如果您打算升级到drf(> = 3)的新版本,请注意这些方法可能会消失,而采用独特的to_representation方法:https://groups.google.com/forum/?fromgroups#!topic/django-rest-framework/9kp5kXCssR4