簡體   English   中英

如何從POST請求中的對象獲取id

[英]how to get id from object in POST request

在這里,我使用以下數據發出 POST 請求:

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

對象分成各自的模型,但是當我很老了的“身份證” targetDefinationruleAssignmentDetails

serializer.py

class RuleAssignmentParamsSerializers(serializers.ModelSerializer):
    ruleAssignmentDetails = RuleAssignmentDetailsSerializers()
    targetDefination = TargetDefinationSerializers()

    class Meta:
        model = RuleAssignmentParams
        fields = (
            'id',
            'ruleAssignmentDetails',
            'detailSrl',
            'parameterName',
            'valueType',
            'overwriteValue',
            'targetDefination',
        )

    def create(self,validated_data):
        ruleAssDetails = validated_data.pop('ruleAssignmentDetails')
        targetdef = validated_data.pop('targetDefination')
        serial = RuleAssignmentParams.objects.create(**validated_data)
        return serial

views.py

def getSimpleRules(request):
    simpleRules = RuleSimple.objects.all()
    simpleRulesSer = OnlySimpleRules(simpleRules,many=True)
    return JsonResponse(simpleRulesSer.data,safe=False) 

@api_view(['GET'])
def getRuleAssignment(request,pk):
    if request.method == 'GET':
        print("get working")
        q=get_object_or_404(RuleAssignmentParams,pk=pk)
        f=RuleAssignmentParamsSerializers(q)
        return JsonResponse(f.data)

@api_view(['POST'])
def ruleAssignment(request):
    if request.method == 'POST':
        data = JSONParser().parse(request)
        validated_data = data
        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)

當我運行它時,它向我顯示了這個錯誤:

IntegrityError at /api/rules/ruleassign
(1048, "Column 'ruleAssignmentDetails_id' cannot be null")

如何獲取的ID ruleAssignmentDetailstargetDefination

序列化程序中的 create 方法看起來不正確。 試試這個:

class RuleAssignmentParamsSerializers(serializers.ModelSerializer):
    ruleAssignmentDetails = RuleAssignmentDetailsSerializers()
    targetDefination = TargetDefinationSerializers()

    class Meta:
        model = RuleAssignmentParams
        fields = (
            'id',
            'ruleAssignmentDetails',
            'detailSrl',
            'parameterName',
            'valueType',
            'overwriteValue',
            'targetDefination',
        )

    def create(self,validated_data):
        ruleAssDetails = validated_data.pop('ruleAssignmentDetails')
        targetdef = validated_data.pop('targetDefination')
        rule_serial = RuleAssignmentDetailsSerializers() 
        rule_instances = rule_serial.create(ruleAssDetails)
        target_serial = RuleAssignmentDetailsSerializers() 
        target_instances = rule_serial.create(targetdef) 
        serial = RuleAssignmentParams.objects.create(**validated_data)
        
        instance = super(RuleAssignmentParams, self).create(validated_data)
        instance.ruleAssignmentDetails.add(*rule_instances)
        instance.ruleAssignmentDetails.add(*target_instances)
        instance.save()
        return instance

僅當不需要模型中的外鍵時才有效。 空白=真,空=真)。 否則,您必須將您的rule_idtarget_id 設置為您的validate_data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM