繁体   English   中英

嵌套序列化程序中不需要数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM