use*_*606 5 django serialization django-rest-framework
我是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')
Run Code Online (Sandbox Code Playgroud)
从上面的代码我得到如下的结果
{
"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
}
]
}
Run Code Online (Sandbox Code Playgroud)
在这里,我需要在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
}
]
}
Run Code Online (Sandbox Code Playgroud)
Rah*_*pta 12
您可以使用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
Run Code Online (Sandbox Code Playgroud)