[英]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"
}
}
對象分成各自的模型,但是當我很老了的“身份證” targetDefination
和ruleAssignmentDetails
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 ruleAssignmentDetails
和targetDefination
?
序列化程序中的 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_id和target_id 設置為您的validate_data 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.