Django REST Serializer удаляет содержимое словаря при преобразовании в Ordered Dict - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь сериализовать полученный 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...