diff --git a/core/serializers.py b/core/serializers.py index f6553ca524ec16366547341dc5baba2d504eba6f..f46507a58647e9e4bb5bf21705e71a84249c0725 100644 --- a/core/serializers.py +++ b/core/serializers.py @@ -1,5 +1,6 @@ import logging +from drf_dynamic_fields import DynamicFieldsMixin from rest_framework import serializers from core.models import (ExamType, Feedback, Student, Submission, @@ -10,7 +11,11 @@ log = logging.getLogger(__name__) user_factory = GradyUserFactory() -class ExamSerializer(serializers.ModelSerializer): +class DynamicFieldsModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer): + pass + + +class ExamSerializer(DynamicFieldsModelSerializer): class Meta: model = ExamType @@ -18,21 +23,21 @@ class ExamSerializer(serializers.ModelSerializer): 'pass_score', 'pass_only',) -class FeedbackSerializer(serializers.ModelSerializer): +class FeedbackSerializer(DynamicFieldsModelSerializer): class Meta: model = Feedback fields = ('text', 'score') -class SubmissionTypeSerializer(serializers.ModelSerializer): +class SubmissionTypeSerializer(DynamicFieldsModelSerializer): class Meta: model = SubmissionType fields = ('name', 'full_score', 'description', 'solution') -class SubmissionSerializer(serializers.ModelSerializer): +class SubmissionSerializer(DynamicFieldsModelSerializer): feedback = serializers.ReadOnlyField(source='feedback.text') score = serializers.ReadOnlyField(source='feedback.score') type_id = serializers.ReadOnlyField(source='type.id') @@ -41,10 +46,11 @@ class SubmissionSerializer(serializers.ModelSerializer): class Meta: model = Submission - fields = ('type_id', 'type_name', 'text', 'feedback', 'score', 'full_score') + fields = ('type_id', 'type_name', 'text', + 'feedback', 'score', 'full_score') -class StudentSerializer(serializers.ModelSerializer): +class StudentSerializer(DynamicFieldsModelSerializer): name = serializers.ReadOnlyField(source='user.fullname') user = serializers.ReadOnlyField(source='user.username') exam = ExamSerializer() @@ -55,7 +61,7 @@ class StudentSerializer(serializers.ModelSerializer): fields = ('name', 'user', 'exam', 'submissions') -class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer): +class SubmissionNoTextFieldsSerializer(DynamicFieldsModelSerializer): score = serializers.ReadOnlyField(source='feedback.score') type = serializers.ReadOnlyField(source='type.name') full_score = serializers.ReadOnlyField(source='type.full_score') @@ -65,7 +71,7 @@ class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer): fields = ('type', 'score', 'full_score') -class StudentSerializerForListView(serializers.ModelSerializer): +class StudentSerializerForListView(DynamicFieldsModelSerializer): name = serializers.ReadOnlyField(source='user.fullname') user = serializers.ReadOnlyField(source='user.username') exam = serializers.ReadOnlyField(source='exam.module_reference') @@ -76,7 +82,7 @@ class StudentSerializerForListView(serializers.ModelSerializer): fields = ('name', 'user', 'exam', 'submissions') -class TutorSerializer(serializers.ModelSerializer): +class TutorSerializer(DynamicFieldsModelSerializer): username = serializers.CharField(source='user.username') feedback_count = serializers.IntegerField(source='get_feedback_count', read_only=True) diff --git a/grady/settings/default.py b/grady/settings/default.py index 9b1b6e817f8b75c03f88077ccd33b0c6a4a4329e..066af8ec33d58aa0cdb0872630db058711d53c0c 100644 --- a/grady/settings/default.py +++ b/grady/settings/default.py @@ -40,6 +40,7 @@ INSTALLED_APPS = [ 'django_extensions', 'rest_framework', 'corsheaders', + 'drf_dynamic_fields', 'core', ]