Skip to content
Snippets Groups Projects
Commit 9d13707b authored by Jan Maximilian Michal's avatar Jan Maximilian Michal
Browse files

Implemented Student serializer with minor reordering of field data

parent e2110167
No related branches found
No related tags found
1 merge request!3Resolve "New input format"
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-05-22 18:27
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('core', '0006_auto_20170413_1102'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='student',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.Student'),
),
migrations.AlterUniqueTogether(
name='submission',
unique_together=set([('type', 'student')]),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-05-22 18:34
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('core', '0007_auto_20170522_1827'),
]
operations = [
migrations.RenameField(
model_name='submission',
old_name='seen',
new_name='seen_by_student',
),
migrations.RemoveField(
model_name='submissiontype',
name='correction_guideline',
),
]
...@@ -62,12 +62,12 @@ def random_matrikel_no(): ...@@ -62,12 +62,12 @@ def random_matrikel_no():
class SubmissionType(models.Model): class SubmissionType(models.Model):
# Fields # Fields
name = models.CharField(max_length=50, unique=True) name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(editable=False, unique=True, default=random_slug) full_score = models.PositiveIntegerField(default=0)
full_score = models.PositiveIntegerField(default=0) task_description = models.TextField()
task_description = models.TextField()
possible_solution = models.TextField() possible_solution = models.TextField()
correction_guideline = models.TextField() slug = models.SlugField(
editable=False, unique=True, default=random_slug)
def __str__(self): def __str__(self):
return self.name return self.name
...@@ -79,10 +79,11 @@ class SubmissionType(models.Model): ...@@ -79,10 +79,11 @@ class SubmissionType(models.Model):
class Student(models.Model): class Student(models.Model):
# Fields # Fields
has_logged_in = models.BooleanField(default=False)
name = models.CharField(max_length=50, default="__no_name__")
matrikel_no = models.CharField( matrikel_no = models.CharField(
unique=True, max_length=8, default=random_matrikel_no) unique=True, max_length=8, default=random_matrikel_no)
has_logged_in = models.BooleanField(default=False)
name = models.CharField(max_length=50, default="__no_name__")
user = models.OneToOneField( user = models.OneToOneField(
User, on_delete=models.CASCADE, User, on_delete=models.CASCADE,
limit_choices_to={'groups__name': 'Students'}, limit_choices_to={'groups__name': 'Students'},
...@@ -92,7 +93,7 @@ class Student(models.Model): ...@@ -92,7 +93,7 @@ class Student(models.Model):
if self.submissions.all(): if self.submissions.all():
return OrderedDict({ return OrderedDict({
s.type : s.feedback.score if hasattr(s, 'feedback') else 0 s.type : s.feedback.score if hasattr(s, 'feedback') else 0
for s in self.submissions.all() for s in self.submissions.all()
}) })
else: else:
return OrderedDict({ return OrderedDict({
...@@ -117,25 +118,25 @@ class Student(models.Model): ...@@ -117,25 +118,25 @@ class Student(models.Model):
class Submission(models.Model): class Submission(models.Model):
# Fields # Fields
slug = models.SlugField(editable=False, unique=True, default=random_slug) seen_by_student = models.BooleanField(default=False)
text = models.TextField(blank=True)
# This indicates that the student has seen his feedback
seen = models.BooleanField(default=False)
type = models.ForeignKey(
SubmissionType,
related_name='submissions'
)
text = models.TextField(blank=True)
pre_corrections = models.TextField(blank=True) pre_corrections = models.TextField(blank=True)
student = models.ForeignKey( slug = models.SlugField(
editable=False,
unique=True,
default=random_slug)
type = models.ForeignKey(
SubmissionType,
related_name='submissions')
student = models.ForeignKey(
Student, Student,
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='submissions' related_name='submissions')
)
class Meta: class Meta:
verbose_name = "Submission" verbose_name = "Submission"
verbose_name_plural = "Submission Set" verbose_name_plural = "Submission Set"
unique_together = (('type', 'student'),)
def __str__(self): def __str__(self):
return "Submission of type '{}' from Student '{}'".format( return "Submission of type '{}' from Student '{}'".format(
...@@ -201,21 +202,17 @@ class Feedback(models.Model): ...@@ -201,21 +202,17 @@ class Feedback(models.Model):
slug = models.SlugField( slug = models.SlugField(
editable=False, editable=False,
unique=True, unique=True,
default=random_slug default=random_slug)
)
of_submission = models.OneToOneField( of_submission = models.OneToOneField(
Submission, Submission,
related_name='feedback', related_name='feedback',
blank=False, null=False blank=False, null=False)
)
of_tutor = models.ForeignKey( of_tutor = models.ForeignKey(
User, related_name='corrected_submissions', User, related_name='corrected_submissions',)
)
of_reviewer = models.ForeignKey( of_reviewer = models.ForeignKey(
User, User,
related_name='reviewed_submissions', related_name='reviewed_submissions',
blank=True, null=True blank=True, null=True)
)
# what is the current status of our feedback # what is the current status of our feedback
( (
......
from rest_framework import serializers from rest_framework import serializers
from core.models import SubmissionType, Student from core.models import SubmissionType, Student, Submission
from django.contrib.auth.models import User from django.contrib.auth.models import User
...@@ -40,10 +40,30 @@ class CreateStudentSerializer(serializers.ModelSerializer): ...@@ -40,10 +40,30 @@ class CreateStudentSerializer(serializers.ModelSerializer):
) )
user.set_password(validated_data['password']) user.set_password(validated_data['password'])
student = Student( return Student.objects.create(
name=validated_data['name'], name=validated_data['name'],
matrikel_no=validated_data['matrikel_no'], matrikel_no=validated_data['matrikel_no'],
user=user, user=user,
) )
return student class CreateSubmissionSerializer(serializers.ModelSerializer):
type = serializers.SlugRelatedField(
queryset=SubmissionType.objects.all(),
slug_field='name'
)
student = serializers.SlugRelatedField(
queryset=User.objects.all(),
slug_field='username'
)
class Meta:
model = Submission
fields = ('type', 'text', 'pre_corrections', 'student')
def create(self, validated_data):
validated_data['student'] = validated_data['student'].student
return Submission.objects.create(**validated_data)
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
{% for submission in submission_list %} {% for submission in submission_list %}
<tr class="align-middle"> <tr class="align-middle">
<td class="align-middle"> <td class="align-middle">
{% if submission.seen %} {% if submission.seen_by_student %}
<span class="badge badge-success">Seen</span> <span class="badge badge-success">Seen</span>
{% endif %} {% endif %}
</td> </td>
......
...@@ -20,7 +20,7 @@ class SubmissionViewStudent(DetailView): ...@@ -20,7 +20,7 @@ class SubmissionViewStudent(DetailView):
def get_object(self): def get_object(self):
obj = Submission.objects.get(slug=self.kwargs['slug']) obj = Submission.objects.get(slug=self.kwargs['slug'])
if in_groups(self.request.user, ('Students', )) and hasattr(obj, 'feedback') and obj.feedback.status == Feedback.ACCEPTED: if in_groups(self.request.user, ('Students', )) and hasattr(obj, 'feedback') and obj.feedback.status == Feedback.ACCEPTED:
obj.seen = True obj.seen_by_student = True
obj.save() obj.save()
return obj return obj
......
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