【问题标题】:Django rest framework add dict to serializerDjango rest框架将dict添加到序列化程序
【发布时间】:2016-06-21 09:26:42
【问题描述】:

这是我的 serializers.py:

class SysUserSerializer(serializers.ModelSerializer):
    pk = serializers.IntegerField(read_only=True)
    login_id = serializers.CharField(required=False)
    name = serializers.CharField(required=False)

    class Meta:
        model = SysUser
        fields = ('pk','login_id','name')

这是我的views.py:

class GetUserDetail(APIView):
    def get(self, request, format=None):
        sysuser = SysUser.objects.get(id=1)
        serializer = SysUserSerializer(sysuser)
        serializer.data['gender'] = 'male' # i don't think this line is working
        return Response(serializer.data, status=200)

但我得到了这样的回应:

{"pk": 1, "login_id": "john77", "name": "John"}

我想要这样的回应:

{"pk": 1, "login_id": "john77", "name": "John", "gender": "male"}

如何实现?有可能吗?

【问题讨论】:

  • @MosesKoledoye 它打印这个 {"pk": 1, "login_id": "john77", "name": "John"}

标签: python django django-rest-framework response django-serializer


【解决方案1】:

这里的问题是serializer.data 不是实例参数,而是返回它的property。因此,您可以通过将 serializer.data 分配给变量来解决此问题。

class GetUserDetail(APIView):
    def get(self, request, format=None):
        sysuser = SysUser.objects.get(id=1)
        serializer = SysUserSerializer(sysuser)
        data = serializer.data
        data['gender'] = 'male'
        return Response(data, status=200)

您也可以在序列化程序的validate 方法中将数据分配给serializer.data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2019-05-20
    • 2020-12-22
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多