【问题标题】:data is not expected in nested serializer嵌套序列化程序中不需要数据
【发布时间】:2021-06-22 08:07:08
【问题描述】:

我正在发帖请求。但数据并没有像预期的那样给我。

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"
  }
}

当我在序列化程序中 print(validated_data) 时,它给了我:

{'detailSrl': 12, 'parameterName': 'Param1', 'valueType': 'D', 'overwriteValue': None}

不是整个对象。如何获取序列化程序中的所有数据以将数据拆分为不同的模型。 只需要将对象传递给序列化程序即可。

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多