我是django rest-framework序列化程序的新手。
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')
从上面的代码我得到了如下结果
{
"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应该如下所示。怎么做到这一点?。
{
"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
}
]
}
答案 0 :(得分:10)
您可以使用SerializerMethodField
将额外数据添加到对象的序列化表示中。
这是一个只读字段。它通过调用方法获得它的价值 它所附加的序列化程序类。它可以用来添加任何排序 数据到对象的序列化表示。
在序列化程序中,添加Available
和Assign
SerializerMethod
字段。执行此操作始终会在序列化数据中添加Available
和Assign
个键。
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