From 2cc9119252baac78f7326342a8aa34db4d71c0dd Mon Sep 17 00:00:00 2001 From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de> Date: Sun, 17 Dec 2017 11:09:34 +0100 Subject: [PATCH] Added optional fields mixin for serializers --- core/serializers.py | 24 +++++++++++++++--------- grady/settings/default.py | 1 + 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/core/serializers.py b/core/serializers.py index f6553ca5..f46507a5 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 9b1b6e81..066af8ec 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', ] -- GitLab