from rest_framework import serializers from .models import * from muscle.models import ExerciseMuscle from equipment.serializers import WorkoutEquipmentSerializer class ExerciseMuscleSerializer(serializers.ModelSerializer): name = serializers.SerializerMethodField() class Meta: model = ExerciseMuscle fields = '__all__' def get_name(self, obj): return obj.muscle.name class ExerciseSerializer(serializers.ModelSerializer): muscles = serializers.SerializerMethodField() equipment = serializers.SerializerMethodField() audio_url = serializers.ReadOnlyField() video_url = serializers.ReadOnlyField() transition_url = serializers.ReadOnlyField() class Meta: model = Exercise fields = '__all__' def get_muscles(self, obj): # Use prefetched related manager if available (avoids N+1 queries) # Callers should use .prefetch_related('exercise_muscle_exercise__muscle') objs = obj.exercise_muscle_exercise.all() return ExerciseMuscleSerializer(objs, many=True).data def get_equipment(self, obj): # Use prefetched related manager if available (avoids N+1 queries) # Callers should use .prefetch_related('workout_exercise_workout__equipment') objs = obj.workout_exercise_workout.all() return WorkoutEquipmentSerializer(objs, many=True).data