Я пытаюсь сериализовать полученный json и использовать встроенный валидатор django.Когда я получаю доступ к проверенным данным, часть содержимого моего словаря теряется, и остается только пара ключ-значение.Pls help.
json:
{'start_date': '2018-10-11', 'end_date': '2018-10-26', 'shifts': [{' supervisor ':' 8 ',' type ':' A ',' drivers_assigned ': [{' driver ':' 2 ',' shuttle ':' 1 ',' deploy_type ':' E '}]}, {'supervisor': '9', 'type': 'P', 'drivers_assigned': [{'driver': '3', 'shuttle': '2', 'deploy_type': 'R'}]}]}
, когда я сериализую его, содержимое массива из drivers_assigned сокращается до значения OrderedDict [{'deploy_type': 'E'], и это дает мне ключевую ошибку, когда явытолкнуть другое предполагаемое содержимое
сериализовано:
OrderedDict ([('shifts', [OrderedDict ([('drivers_assigned', [OrderedDict ([('deploy_type'), 'E')])]), ('type', 'A'), ('supervisor',)]), OrderedDict ([('drivers_assigned', [OrderedDict ([('deploy_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