我正在尝试序列化接收到的json并使用django的内置验证器。当我访问经过验证的数据时,字典的某些内容将丢失,仅保留一个键值对。请帮助。
json:
{'start_date':'2018-10-11','end_date':'2018-10-26','shifts':[{'supervisor':'8','type':'A', 'drivers_assigned':[{'driver':'2','shuttle':'1','deployment_type':'E'}]}},{'supervisor':'9','type':'P', 'drivers_assigned':[{'driver':'3','shuttle':'2','deployment_type':'R'}]}}}}
当我对其进行序列化时, drivers_assigned 中的数组内容被减少为OrderedDict [{'deployment_type':'E'],当我弹出其他假定内容时,它给了我一个关键错误< / p>
序列化:
OrderedDict([('shifts',[OrderedDict([('drivers_assigned',[OrderedDict([('deployment_type','E')])))),('type','A'),('主管',)]),OrderedDict([('drivers_assigned',[OrderedDict([('deployment_type','R')])))),('type','P'),('supervisor',)] )])(('start_date',datetime.date(2018,10,11))])
views.py
@staticmethod
def post(request):
data = json.loads(request.body)
schedule_serializer = ScheduleSerializer(data=data)
if schedule_serializer.is_valid():
schedule = schedule_serializer.create(validated_data=schedule_serializer.validated_data)
print(schedule_serializer.errors)
return Response(data={
"start_date": schedule.start_date,
"end_date": schedule.end_date
}, status=status.HTTP_200_OK)
else:
return Response(data={
"errors": schedule_serializer.errors
})
serializers.py
def create(self, validated_data):
shifts_data = validated_data.pop('shifts')
schedule = Schedule.objects.create(**validated_data)
schedule.end_date = schedule.start_date + timedelta(days=14) # start_date + 14 days = 15 days (changed to +15 since every 15 days)
schedule.save()
new_sched = Schedule.objects.get(id=schedule.id) # gets django object to be used
for shift_data in shifts_data:
drivers_data = shift_data.pop('drivers_assigned')
shift = Shift.objects.create(schedule=new_sched, **shift_data)
for driver_data in drivers_data:
shuttle_id = driver_data.pop('shuttle')
driver_id = driver_data.pop('driver')
deployment_type = driver_data.pop('deployment')
DriversAssigned.objects.create(shift=shift,
deployment_type=deployment_type,
driver=driver_id,
shuttle=shuttle_id)
return schedule