转换为有序字典

时间:2018-10-11 17:42:37

标签: python django reactjs django-rest-framework

我正在尝试序列化接收到的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

0 个答案:

没有答案