如何在Django中将额外数据附加到现有的序列化器 [英] How to append extra data to the existing serializer in django

查看:141
本文介绍了如何在Django中将额外数据附加到现有的序列化器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是django rest-framework序列化程序的新手。

I am new to django rest-framework serializers.

views.py 
@csrf_exempt
@api_view(['GET'])         
def getAllAvailableEmps(request):  
    if request.method == 'GET':
        try:
            roleId = request.GET['emp_role_id']
            getEmp = emp_details.objects.filter(emp_dc_id = None,emp_active = True,emp_role_id = roleId)
            serializer = getEmpDcSerializer(getEmp,many=True)
            return JSONResponse({"allAvilableEmps":serializer.data})
        except Exception as e:
            return JSONResponse("Failure "+str(e)) 

serializers.py
class getEmpDcSerializer(serializers.ModelSerializer): 
    class Meta:
        model = emp_details
        fields = ('emp_id','emp_dc_id','emp_first_name','emp_last_name','emp_role_id')

从上面的代码中我得到如下结果

from the above code i got the result like below

{
  "allAvilableEmps": [
    {
      "emp_id": 13,
      "emp_dc_id": [],
      "emp_first_name": "aaa",
      "emp_last_name": "bb",
      "emp_role_id": 4
    },
    {
      "emp_id": 16,
      "emp_dc_id": [],
      "emp_first_name": "cccc",
      "emp_last_name": "ddd",
      "emp_role_id": 4
    }
]
}

在这里,我需要在JOSN数据中再添加两个字段(Available,Assign)。就像下面的(数据库中不存在)。
因此,最终的JSON应该如下所示。

Here,I need to add two more fields(Available,Assign) to the JOSN data.Like below(which is not exist in the database).. So final JSON should be like below. How to achieve this ?.

{
  "allAvilableEmps": [
    {
      "emp_id": 13,
      "emp_dc_id": [],
      "emp_first_name": "aaa",
      "emp_last_name": "bb",
      "emp_role_id": 4
      "Available":1,
      "Assign":2    
    },
    {
      "emp_id": 16,
      "emp_dc_id": [],
      "emp_first_name": "cccc",
      "emp_last_name": "ddd",
      "emp_role_id": 4
      "Available":1,
      "Assign":2    
    }
  ]
}


推荐答案

您可以使用 SerializerMethodField ,以向对象的序列化表示形式添加额外的数据。

You can use SerializerMethodField to add extra data to the serialized representation of an object.


这是一个只读字段。它通过在附加到序列化器类的
上调用一个方法来获取其值。它可以用来将任何类型的
数据添加到对象的序列化表示中。

This is a read-only field. It gets its value by calling a method on the serializer class it is attached to. It can be used to add any sort of data to the serialized representation of your object.

在序列化器中,添加可用分配 SerializerMethod 字段。这样做总是会在序列化数据中添加 Available Assign 键。

In your serializer, add Available and Assign SerializerMethod fields. Doing this will always add Available and Assign keys in your serialized data.

class getEmpDcSerializer(serializers.ModelSerializer): 
    Available = serializers.SerializerMethodField() # add field
    Assign = serializers.SerializerMethodField() # add field

    class Meta:
        model = emp_details
        fields = ('emp_id','emp_dc_id','emp_first_name','emp_last_name','emp_role_id', 'Available', 'Assign')

    def get_Available(self, obj):
        # here write the logic to compute the value based on object
        return 1

    def get_Assign(self, obj):
        # here write the logic to compute the value based on object
        return 2

这篇关于如何在Django中将额外数据附加到现有的序列化器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆