Skip to content

Commit 89328bc

Browse files
add time taken to submit
1 parent f3f48d0 commit 89328bc

File tree

5 files changed

+43
-13
lines changed

5 files changed

+43
-13
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 3.2.7 on 2021-10-23 14:58
2+
3+
import datetime
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('classroom', '0014_alter_readingquestion_options'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='readingsubmission',
16+
name='time_taken',
17+
field=models.DurationField(default=datetime.timedelta(0)),
18+
),
19+
]

classroom/models/reading_submission.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from datetime import timedelta
2+
13
from django.contrib.auth import get_user_model
24
from django.db import models
35

@@ -10,6 +12,7 @@ class ReadingSubmission(models.Model):
1012
exercise = models.ForeignKey(ReadingExercise, on_delete=models.CASCADE, related_name='submissions')
1113
submitter = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reading_submissions')
1214
submit_datetime = models.DateTimeField(auto_now_add=True)
15+
time_taken = models.DurationField(default=timedelta(seconds=0))
1316

1417
class Meta:
1518
ordering = ['exercise', 'submitter', 'submit_datetime']

classroom/serializers/exercise.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,17 @@ def save(self, **kwargs):
2727
return super().save(**kwargs)
2828

2929

30-
class _SubmitAnswerListSerializer(serializers.ListSerializer):
30+
class _ReadingExerciseAnswerSerializer(serializers.Serializer):
31+
question_number = serializers.IntegerField(min_value=1)
32+
content = serializers.CharField()
33+
34+
35+
class ReadingExerciseSubmitSerializer(serializers.Serializer):
36+
time_taken = serializers.DurationField(
37+
help_text='Number of seconds, or a string in this format: "[DD] [HH:[MM:]]ss[.uuuuuu]".'
38+
)
39+
answers = _ReadingExerciseAnswerSerializer(many=True)
40+
3141
def save(self, exercise=None):
3242
student = self.context['request'].user
3343
if exercise.submissions.filter(submitter=student).exists():
@@ -38,11 +48,16 @@ def save(self, exercise=None):
3848
self._create_submission_answers(submission)
3949

4050
def _create_submission(self, student, exercise):
41-
return ReadingSubmission.objects.create(submitter=student, exercise=exercise)
51+
time_taken = self.validated_data['time_taken']
52+
return ReadingSubmission.objects.create(
53+
submitter=student,
54+
exercise=exercise,
55+
time_taken=time_taken,
56+
)
4257

4358
def _create_submission_answers(self, submission):
4459
answers_to_create = []
45-
for answer in self.validated_data:
60+
for answer in self.validated_data['answers']:
4661
answers_to_create.append(
4762
ReadingSubmissionAnswer(
4863
submission=submission,
@@ -53,14 +68,6 @@ def _create_submission_answers(self, submission):
5368
ReadingSubmissionAnswer.objects.bulk_create(answers_to_create)
5469

5570

56-
class ReadingExerciseSubmitSerializer(serializers.Serializer):
57-
question_number = serializers.IntegerField(min_value=1)
58-
content = serializers.CharField()
59-
60-
class Meta:
61-
list_serializer_class = _SubmitAnswerListSerializer
62-
63-
6471
class ReadingExerciseUploadImgSerializer(serializers.Serializer):
6572
image = serializers.ImageField(write_only=True)
6673
image_url = serializers.URLField(read_only=True)

classroom/serializers/reading_submission.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ class Meta:
1212
model = ReadingSubmission
1313
fields = [
1414
'pk', 'url', 'exercise',
15-
'submitter', 'submit_datetime', 'answers',
15+
'submitter', 'submit_datetime',
16+
'time_taken', 'answers',
1617
]
1718
extra_kwargs = {
1819
'url': {'view_name': 'reading-submission-detail'},

classroom/views/exercise.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ReadingExerciseViewSet(ModelViewSet):
2727
def submit_answers(self, request, pk):
2828
"""Student submit their answer to this exercise.
2929
"""
30-
serializer = self.get_serializer(data=request.data, many=True)
30+
serializer = self.get_serializer(data=request.data)
3131
serializer.is_valid(raise_exception=True)
3232
exercise = self.get_object()
3333
serializer.save(exercise=exercise)

0 commit comments

Comments
 (0)