Сериализация под заказ - PullRequest
0 голосов
/ 17 мая 2019

Во-первых, я думаю, что важно показать некоторый код, чтобы помочь понять, чего я пытаюсь достичь.

Вот мои сериализаторы:

class ExerciseRoutineSerializer(serializers.ModelSerializer):
    exercise = ExerciseSerializer()

    class Meta:
        model = ExerciseRoutine
        fields = '__all__'

    def to_representation(self, obj):
        representation = super().to_representation(obj)
        exercise_representation = representation.pop('exercise')
        for key in exercise_representation:
            representation[key] = exercise_representation[key]

        return representation

class RoutineSerializer(serializers.ModelSerializer):
    exercises = ExerciseRoutineSerializer(many=True)

    class Meta:
        model = Routine
        fields = '__all__'

В основном, что мне нужно, это иметь поле упражнений в RoutineSerializer в некоторой упорядоченной структуре данных.В настоящее время это мой вывод:

[
    {
        "id": 1,
        "routines": [
            {
                "id": 1,
                "exercises": [
                    {
                        "id": 1,
                        "index": 0,
                        "rest_time": 60,
                        "repetition_goal": 10,
                        "equipment": [
                            {
                                "id": 1,
                                "equipment": "Fixed Bar"
                            }
                        ],
                        "name": "Pull up"
                    }
                ],
                "name": "RoutineName",
                "routine_type": "Regular"
            }
        ],
        "name": "WorkoutName"
    }
]

Он возвращает упражнения в соответствии с ExerciseRoutineSerializer, и это здорово.Однако, когда мне нужно было их упорядочить, я создал поле 'index' в модели, которое отвечает за его порядок.выглядит примерно так:

[
    {
        "id": 1,
        "routines": [
            {
                "id": 1,
                "exercises": {
                        0 : {"id": 1, "rest_time": 60, "repetition_goal": 10,"equipment": [{..}], "name": "Pull up"},
                        1 : {"id": 13, "rest_time": 60, "repetition_goal": 10,"equipment": [{..}], "name": "Anotherexericse"}
                },
                "name": "RoutineName",
                "routine_type": "Regular"

            }
        ],
        "name": "WorkoutName"
    }
]

В этом случае ExerciseRoutineSerializer вернет словарь вместо списка, ключом этого словаря будет поле 'index', а все остальное попадет вЗначение.Если честно, я не знаю, как реализовать, так как это мой самый первый проект с DRF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...