Skip to content
Snippets Groups Projects
Commit 2cc91192 authored by robinwilliam.hundt's avatar robinwilliam.hundt
Browse files

Added optional fields mixin for serializers

parent a42a0d4a
No related branches found
No related tags found
1 merge request!25WIP: Resolve "A new student overview page with Vue.js"
import logging import logging
from drf_dynamic_fields import DynamicFieldsMixin
from rest_framework import serializers from rest_framework import serializers
from core.models import (ExamType, Feedback, Student, Submission, from core.models import (ExamType, Feedback, Student, Submission,
...@@ -10,7 +11,11 @@ log = logging.getLogger(__name__) ...@@ -10,7 +11,11 @@ log = logging.getLogger(__name__)
user_factory = GradyUserFactory() user_factory = GradyUserFactory()
class ExamSerializer(serializers.ModelSerializer): class DynamicFieldsModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
pass
class ExamSerializer(DynamicFieldsModelSerializer):
class Meta: class Meta:
model = ExamType model = ExamType
...@@ -18,21 +23,21 @@ class ExamSerializer(serializers.ModelSerializer): ...@@ -18,21 +23,21 @@ class ExamSerializer(serializers.ModelSerializer):
'pass_score', 'pass_only',) 'pass_score', 'pass_only',)
class FeedbackSerializer(serializers.ModelSerializer): class FeedbackSerializer(DynamicFieldsModelSerializer):
class Meta: class Meta:
model = Feedback model = Feedback
fields = ('text', 'score') fields = ('text', 'score')
class SubmissionTypeSerializer(serializers.ModelSerializer): class SubmissionTypeSerializer(DynamicFieldsModelSerializer):
class Meta: class Meta:
model = SubmissionType model = SubmissionType
fields = ('name', 'full_score', 'description', 'solution') fields = ('name', 'full_score', 'description', 'solution')
class SubmissionSerializer(serializers.ModelSerializer): class SubmissionSerializer(DynamicFieldsModelSerializer):
feedback = serializers.ReadOnlyField(source='feedback.text') feedback = serializers.ReadOnlyField(source='feedback.text')
score = serializers.ReadOnlyField(source='feedback.score') score = serializers.ReadOnlyField(source='feedback.score')
type_id = serializers.ReadOnlyField(source='type.id') type_id = serializers.ReadOnlyField(source='type.id')
...@@ -41,10 +46,11 @@ class SubmissionSerializer(serializers.ModelSerializer): ...@@ -41,10 +46,11 @@ class SubmissionSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Submission 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') name = serializers.ReadOnlyField(source='user.fullname')
user = serializers.ReadOnlyField(source='user.username') user = serializers.ReadOnlyField(source='user.username')
exam = ExamSerializer() exam = ExamSerializer()
...@@ -55,7 +61,7 @@ class StudentSerializer(serializers.ModelSerializer): ...@@ -55,7 +61,7 @@ class StudentSerializer(serializers.ModelSerializer):
fields = ('name', 'user', 'exam', 'submissions') fields = ('name', 'user', 'exam', 'submissions')
class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer): class SubmissionNoTextFieldsSerializer(DynamicFieldsModelSerializer):
score = serializers.ReadOnlyField(source='feedback.score') score = serializers.ReadOnlyField(source='feedback.score')
type = serializers.ReadOnlyField(source='type.name') type = serializers.ReadOnlyField(source='type.name')
full_score = serializers.ReadOnlyField(source='type.full_score') full_score = serializers.ReadOnlyField(source='type.full_score')
...@@ -65,7 +71,7 @@ class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer): ...@@ -65,7 +71,7 @@ class SubmissionNoTextFieldsSerializer(serializers.ModelSerializer):
fields = ('type', 'score', 'full_score') fields = ('type', 'score', 'full_score')
class StudentSerializerForListView(serializers.ModelSerializer): class StudentSerializerForListView(DynamicFieldsModelSerializer):
name = serializers.ReadOnlyField(source='user.fullname') name = serializers.ReadOnlyField(source='user.fullname')
user = serializers.ReadOnlyField(source='user.username') user = serializers.ReadOnlyField(source='user.username')
exam = serializers.ReadOnlyField(source='exam.module_reference') exam = serializers.ReadOnlyField(source='exam.module_reference')
...@@ -76,7 +82,7 @@ class StudentSerializerForListView(serializers.ModelSerializer): ...@@ -76,7 +82,7 @@ class StudentSerializerForListView(serializers.ModelSerializer):
fields = ('name', 'user', 'exam', 'submissions') fields = ('name', 'user', 'exam', 'submissions')
class TutorSerializer(serializers.ModelSerializer): class TutorSerializer(DynamicFieldsModelSerializer):
username = serializers.CharField(source='user.username') username = serializers.CharField(source='user.username')
feedback_count = serializers.IntegerField(source='get_feedback_count', feedback_count = serializers.IntegerField(source='get_feedback_count',
read_only=True) read_only=True)
......
...@@ -40,6 +40,7 @@ INSTALLED_APPS = [ ...@@ -40,6 +40,7 @@ INSTALLED_APPS = [
'django_extensions', 'django_extensions',
'rest_framework', 'rest_framework',
'corsheaders', 'corsheaders',
'drf_dynamic_fields',
'core', 'core',
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment