1

這是我serializers.py:Django的REST框架添加詞典到串行

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"} 

它是如何做到的?有可能這樣做嗎?

+0

@MosesKoledoye它打印此{ 「PK」:1, 「LOGIN_ID」: 「john77」, 「名」: 「約翰」} – Krisnadi

回答

3

這裏的問題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

+0

謝謝。有用 – Krisnadi