首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改django rest框架发送的响应

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

Stack Overflow用户
提问于 2014-11-27 12:43:12
回答 2查看 5.5K关注 0票数 4

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

我有两个序列化器,一个用于重新读取GET请求,另一个用于POST、PUT请求。

这是因为像interval这样的字段很少,我是按用户输入整数的,但是在数据库中,我将时间保存为增量,所以我必须对它们进行多次处理,使它们成为前端的秒。

因此,例如,用户输入的interval = 5,我将5*60*60发布到服务器。

为了阅读,我制作了ReadSerializer,我在那里潜水到60*60,再次向用户展示他添加的内容。

这是在工作中发现我的问题是在将我的对象保存到数据库之后,djnago框架在保存对象时发送对象,该对象具有interval = 5*60*60。惰性只是一个4-5护盾的例子,在投球前我要在前端更换它们。

有没有办法用我的READ serializer before sending

代码语言:javascript
复制
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')

这就是我们的观点

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-28 09:15:38

您可以使用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

票数 3
EN

Stack Overflow用户

发布于 2022-09-08 07:31:40

我会在前端的JavaScript中修改它。然而,我也有类似的问题,并像这样解决了它(警告,我刚刚开始使用DRF,所以可能不是最好的方法):

只需直接更改方法的响应,首先获取原始响应,然后编辑它的data属性,这是要返回的数据的dict (预序列化):

代码语言:javascript
复制
class UserListCreateView(generics.ListCreateAPIView):
    ...

    def list(self, request, *args, **kwargs):
            response = super().list(request, *args, **kwargs)
            response.data['interval'] = response.data['interval'] / 60 / 60
            return response
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27171100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档