如何在Django中将额外数据附加到现有的序列化器 [英] How to append extra data to the existing serializer in 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屋!