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