How to set dynamic attributes in django rest framework serializers?

Viewed 81

I have some json in the following format:

      {
        "daySchedules": {
            "500000004061582000": {
                "scheduleName": "Friday-Sunday",
                "services": [
                    {
                        "name": "Lunch",
                        "hours": {
                            "startTime": "12:00:00.000",
                            "endTime": "16:00:00.000"
                        },
                        "overnight": false
                    },
                    {
                        "name": "Dinner",
                        "hours": {
                            "startTime": "17:00:00.000",
                            "endTime": "23:00:00.000"
                        },
                        "overnight": false
                    }
                ],
                "openTime": "12:00:00.000",
                "closeTime": "23:00:00.000"
            },
            "500000004061559163": {
                "scheduleName": "Tuesday-Thursday",
                "services": [
                    {
                        "name": "Breakfast",
                        "hours": {
                            "startTime": "04:00:00.000",
                            "endTime": "11:00:00.000"
                        },
                        "overnight": false
                    },
                    {
                        "name": "Lunch",
                        "hours": {
                            "startTime": "12:00:00.000",
                            "endTime": "16:00:00.000"
                        },
                        "overnight": false
                    },
                    {
                        "name": "Dinner",
                        "hours": {
                            "startTime": "17:00:00.000",
                            "endTime": "20:00:00.000"
                        },
                        "overnight": false
                    }
                ],
                "openTime": "04:00:00.000",
                "closeTime": "20:00:00.000"
            }
        },
        "weekSchedule": {
            "monday": null,
            "tuesday": "500000004061559163",
            "wednesday": "500000004061559163",
            "thursday": "500000004061559163",
            "friday": "500000004061582000",
            "saturday": "500000004061582000",
            "sunday": "500000004061582000"
        }
    }

The attributes in the json 500000004061582000 and 500000004061559163 is dynamic and determined by what's returned in the weekSchedule.

I wish to create the following serializers:

class ScheduleForDaySerializer(serializers.Serializer):
    schedule_name = serializers.CharField()
    services = serializers.ListField()
    open_time = serializers.CharField()
    close_time = serializers.CharField()

class WeekScheduleSerializer(serializers.Serializer):
    monday = serializers.CharField(allow_null=True)
    tuesday = serializers.CharField(allow_null=True)
    wednesday = serializers.CharField(allow_null=True)
    thursday = serializers.CharField(allow_null=True)
    friday = serializers.CharField(allow_null=True)
    saturday = serializers.CharField(allow_null=True)
    sunday = serializers.CharField(allow_null=True)


class DaySchedulesSerializer(serializers.Serializer):
    # what comes here?

class SchedulesSerializer(serializers.Serializer):
    day_schedules = DaySchedulesSerializer()
    week_schedule = WeekScheduleSerializer()

I'm struggling to determine how to serialize the attributes for that daySchedules json object since the key attributes are dynamic and not necessarily the same each time. Ideally I want to explicitly list out what each attribute type is.

After creating the serializer I want to do the following:

serializer = SchedulesSerializer(data=data) # data is the json object shown above
serializer.is_valid()
response = serializer.data
# do something with the response
0 Answers
Related