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():
class SubmissionType(models.Model):
# Fields
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(editable=False, unique=True, default=random_slug)
full_score = models.PositiveIntegerField(default=0)
task_description = models.TextField()
name = models.CharField(max_length=50, unique=True)
full_score = models.PositiveIntegerField(default=0)
task_description = models.TextField()
possible_solution = models.TextField()
correction_guideline = models.TextField()
slug = models.SlugField(
editable=False, unique=True, default=random_slug)
def __str__(self):
return self.name
......@@ -79,10 +79,11 @@ class SubmissionType(models.Model):
class Student(models.Model):
# Fields
has_logged_in = models.BooleanField(default=False)
name = models.CharField(max_length=50, default="__no_name__")
matrikel_no = models.CharField(
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, on_delete=models.CASCADE,
limit_choices_to={'groups__name': 'Students'},
......@@ -92,7 +93,7 @@ class Student(models.Model):
if self.submissions.all():
return OrderedDict({
s.type : s.feedback.score if hasattr(s, 'feedback') else 0
for s in self.submissions.all()
for s in self.submissions.all()
})
else:
return OrderedDict({
......@@ -117,25 +118,25 @@ class Student(models.Model):
class Submission(models.Model):
# Fields
slug = models.SlugField(editable=False, unique=True, default=random_slug)
# 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)
seen_by_student = models.BooleanField(default=False)
text = 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,
on_delete=models.CASCADE,
related_name='submissions'
)
related_name='submissions')
class Meta:
verbose_name = "Submission"
verbose_name_plural = "Submission Set"
unique_together = (('type', 'student'),)
def __str__(self):
return "Submission of type '{}' from Student '{}'".format(
......@@ -201,21 +202,17 @@ class Feedback(models.Model):
slug = models.SlugField(
editable=False,
unique=True,
default=random_slug
)
default=random_slug)
of_submission = models.OneToOneField(
Submission,
related_name='feedback',
blank=False, null=False
)
blank=False, null=False)
of_tutor = models.ForeignKey(
User, related_name='corrected_submissions',
)
User, related_name='corrected_submissions',)
of_reviewer = models.ForeignKey(
User,
related_name='reviewed_submissions',
blank=True, null=True
)
blank=True, null=True)
# what is the current status of our feedback
(
......
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
......@@ -40,10 +40,30 @@ class CreateStudentSerializer(serializers.ModelSerializer):
)
user.set_password(validated_data['password'])
student = Student(
return Student.objects.create(
name=validated_data['name'],
matrikel_no=validated_data['matrikel_no'],
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 @@
{% for submission in submission_list %}
<tr class="align-middle">
<td class="align-middle">
{% if submission.seen %}
{% if submission.seen_by_student %}
<span class="badge badge-success">Seen</span>
{% endif %}
</td>
......
......@@ -20,7 +20,7 @@ class SubmissionViewStudent(DetailView):
def get_object(self):
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:
obj.seen = True
obj.seen_by_student = True
obj.save()
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