[英]data is not expected in nested serializer
我正在提出邮寄请求。 但数据并没有像预期的那样给我。
views.py
@api_view(['POST'])
def ruleAssignment(request):
if request.method == 'POST':
data = JSONParser().parse(request)
serializer=RuleAssignmentParamsSerializers(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data,status=status.HTTP_200_OK,safe=False)
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
和serializers.py
我有创建函数来拆分对象并将数据保存在不同的模型中。
class RuleAssignmentParamsSerializers(serializers.ModelSerializer):
ruleAssignmentDetails = serializers.SerializerMethodField()
targetDefination = serializers.SerializerMethodField()
class Meta:
model = RuleAssignmentParams
fields = (
'id',
'ruleAssignmentDetails',
'detailSrl',
'parameterName',
'valueType',
'overwriteValue',
'targetDefination',
)
def create(self,validated_data):
print(f'validated_data',validated_data)
ruleAssDetails = validated_data.pop('ruleAssignmentDetails')
print(f'ruleAssDetails',ruleAssDetails)
def get_ruleAssignmentDetails(self,obj):
rule = RuleAssignmentDetails.objects.get(id=obj.ruleAssignmentDetails_id)
serial = RuleAssignmentDetailsSerializers(rule)
return serial.data
def get_targetDefination(self,obj):
rule = TargetDefination.objects.get(id=obj.targetDefination_id)
serial = TargetDefinationSerializers(rule)
return serial.data
和我发送的对象:
{
"ruleAssignmentDetails": {
"id": 1,
"ruleAssignment": {
"id": 1,
"empId": 1,
"roleId": 1,
"empName": "Emp01",
"roleName": "CEO"
},
"detailSrl": 12,
"rule": 4,
"validityType": "F",
"startDate": "2021-06-14",
"endDate": null,
"frequency": {
"id": 1,
"frequencyName": "Test",
"frequencyTpe": "Weekly"
}
},
"detailSrl": 12,
"parameterName": "Param1",
"valueType": "D",
"overwriteValue": null,
"targetDefination": {
"id": 1,
"targetName": "MIN SALES",
"displayName": "MIN SALES"
}
}
当我在序列化程序中打印(validated_data)时,它给了我:
{'detailSrl': 12, 'parameterName': 'Param1', 'valueType': 'D', 'overwriteValue': None}
不是整个对象。 如何获取序列化程序中的所有数据以将数据拆分为不同的模型。 只需要将对象传递给序列化程序。
试试这个:
class RuleAssignmentParamsSerializers(serializers.ModelSerializer):
ruleAssignmentDetails = serializers.SerializerMethodField()
targetDefination = serializers.SerializerMethodField()
class Meta:
model = RuleAssignmentParams
fields = (
'id',
'ruleAssignmentDetails',
'detailSrl',
'parameterName',
'valueType',
'overwriteValue',
'targetDefination',
)
depth = 1 <--- add this line in your code
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.