def destroy(self, request, pk): try: exercise = Exercise.objects.get(name=pk) serializer = ExerciseSerializer(exercise) exercise.delete() if serializer.is_valid(): return Response(serializer.data, status=status.HTTP_202_ACCEPTED) else: return Response(status=status.HTTP_400_BAD_REQUEST) except Exercise.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND)
def partial_update(self, request, pk): try: data = JSONParser().parse(request) exercise = Exercise.objects.get(name=pk) serializer = ExerciseSerializer(exercise, data=data, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_202_ACCEPTED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except Exercise.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND)
class ProfileSerializer(serializers.ModelSerializer): user = UserSerializer(required=True) exercises = ExerciseSerializer(many=True) class Meta: model = Profile fields = ['id', 'user', 'exercises']
def list(self, request): queryset = Exercise.objects.all() name = request.query_params.get('name') type = request.query_params.get('type') age = request.query_params.get('age') difficulty = request.query_params.get('difficulty') muscle = request.query_params.get('muscle') categories = request.query_params.get('categories') if name is not None: queryset = queryset.filter(name=name) elif type is not None: queryset = queryset.filter(type=type) elif age is not None: queryset = queryset.filter(age=age) elif difficulty is not None: queryset = queryset.filter(difficulty=difficulty) elif muscle is not None: queryset = queryset.filter(muscle=muscle) elif categories is not None: queryset = queryset.filter(categories=categories) if queryset.count() > 0: serializer = ExerciseSerializer(queryset, many=True) return Response(serializer.data, status=status.HTTP_200_OK) else: return Response(status=status.HTTP_404_NOT_FOUND)
class TopicSerializer(serializers.ModelSerializer): exercises = ExerciseSerializer(many=True) lessons = LessonSerializer(many=True) subject_title = serializers.CharField() adminnote_notes = AdminNoteSerializer(many=True) class Meta: model=Topic fields='__all__'
class ExerciseRecordNoUserSerializer(serializers.ModelSerializer): exercise = ExerciseSerializer() answer = UserAnswerRecordSerializer(many=True) class Meta: model = ExerciseRecord fields = ('exercise', 'answer', 'score') read_only_fields = ('exercise', 'score')
class ExerciseRecordSerializer(serializers.ModelSerializer): exercise = ExerciseSerializer() user = UserAccountSerializer() class Meta: model = ExerciseRecord fields = ('exercise', 'user', 'score') read_only_fields = ('exercise', 'user')
def get(self, request, grade_id, skill_id, format=None): skills = Skill.objects.filter(grade__id=grade_id) skill = skills.get(id_in_grade=skill_id) exercises = Exercise.objects.filter(skill=skill).all() exercise = exercises[randint(0, exercises.count() - 1)] serializer = ExerciseSerializer(exercise) return Response(serializer.data)
class RoutineSerializer(serializers.ModelSerializer): exercises = ExerciseSerializer(read_only=True, many=True) class Meta: model = Routine # fields = '__all__' fields = ("id", "name", "description", "exercises", "created_at", "author") extra_kwargs = {'exercises': {'required': False}} # def create(self, validated_data): # profile_data = validated_data.pop('profile') # user = User.objects.create(**validated_data) # Profile.objects.create(user=user, **profile_data) # return user
class WorkoutSerializer(OwnedMultiAliasResourceSerializer): exercises = ExerciseSerializer(many=True) class Meta: model = Workout fields = extend_fields(OwnedMultiAliasResourceSerializer, ['exercises', 'time', 'is_complete']) extra_kwargs = { 'url': {'view_name': 'workout-detail', 'lookup_field': 'pk'} } def update(self, instance, validated_data): instance.name = validated_data.get('name', instance.name) instance.snames = validated_data.get('snames', instance.snames) instance.time = validated_data.get('time', instance.time) instance.is_complete = validated_data.get('is_complete', instance.is_complete) for exercise_data in validated_data.get('exercises', []): _update_exercise(instance[exercise_data['order']], exercise_data) instance.save() return instance
def get_exercises(self, obj): return ExerciseSerializer(instance=obj.exercise_set, many=True).data