Skip to content

Commit 3468387

Browse files
reading submission viewset
1 parent 7af186a commit 3468387

File tree

9 files changed

+82
-5
lines changed

9 files changed

+82
-5
lines changed

classroom/filters/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from .classroom import ClassroomFilter
22
from .exercise import ReadingExerciseFilter
33
from .question import ReadingQuestionFilter
4+
from .reading_submission import ReadingSubmissionFilter
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from django_filters import rest_framework as filters
2+
3+
from classroom.models import ReadingSubmission
4+
5+
6+
class ReadingSubmissionFilter(filters.FilterSet):
7+
class Meta:
8+
model = ReadingSubmission
9+
fields = {
10+
'exercise': ['exact'],
11+
'submitter': ['exact'],
12+
'submit_datetime': ['gte', 'lte'],
13+
}
14+
15+
@property
16+
def qs(self):
17+
parent = super().qs
18+
user = self.request.user
19+
20+
if user.is_teacher():
21+
classrooms = user.classrooms_teaching.all()
22+
qs = parent.filter(exercise__classrooms__in=classrooms)
23+
else:
24+
qs = parent.filter(submitter=user)
25+
qs = qs.select_related('exercise__creator')\
26+
.prefetch_related('answers')
27+
28+
return qs
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 3.2.7 on 2021-10-06 14:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('classroom', '0011_readingsubmission_readingsubmissionanswer'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='readingsubmission',
15+
options={'ordering': ['exercise', 'submitter', 'submit_datetime']},
16+
),
17+
migrations.AlterField(
18+
model_name='readingsubmission',
19+
name='submit_datetime',
20+
field=models.DateTimeField(auto_now_add=True),
21+
),
22+
]
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from django.contrib.auth import get_user_model
22
from django.db import models
3-
from django.utils import timezone
43

54
from .reading_exercise import ReadingExercise
65

@@ -10,7 +9,7 @@
109
class ReadingSubmission(models.Model):
1110
exercise = models.ForeignKey(ReadingExercise, on_delete=models.CASCADE, related_name='submissions')
1211
submitter = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reading_submissions')
13-
submit_datetime = models.DateTimeField(default=timezone.now)
12+
submit_datetime = models.DateTimeField(auto_now_add=True)
1413

1514
class Meta:
16-
ordering = ['exercise', 'submitter']
15+
ordering = ['exercise', 'submitter', 'submit_datetime']

classroom/serializers/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from .classroom import (AddReadingExerciseSerializer, AddStudentSerializer,
2-
ClassroomSerializer,
3-
RemoveReadingExerciseSerializer,
2+
ClassroomSerializer, RemoveReadingExerciseSerializer,
43
RemoveStudentSerializer)
54
from .exercise import ReadingExerciseSerializer
65
from .question import ReadingQuestionSerializer
6+
from .reading_submission import ReadingSubmissionSerializer
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from rest_framework import serializers
2+
from classroom.models import ReadingSubmission
3+
4+
5+
class ReadingSubmissionSerializer(serializers.HyperlinkedModelSerializer):
6+
class Meta:
7+
model = ReadingSubmission
8+
fields = ['pk', 'url', 'exercise', 'submitter', 'submit_datetime']
9+
extra_kwargs = {
10+
'url': {'view_name': 'reading-submission-detail'},
11+
'exercise': {'view_name': 'reading-exercise-detail'},
12+
}

classroom/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@
1313
router.register('classrooms', views.ClassroomViewSet, basename='classroom')
1414
router.register('reading-exercises', views.ReadingExerciseViewSet, basename='reading-exercise')
1515
router.register('reading-questions', views.ReadingQuestionViewSet, basename='reading-question')
16+
router.register('reading-submissions', views.ReadingSubmissionViewSet, basename='reading-submission')
1617

1718
urlpatterns.extend(router.urls)

classroom/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from .classroom import ClassroomViewSet
22
from .exercise import ReadingExerciseViewSet
33
from .question import ReadingQuestionViewSet
4+
from .reading_submission import ReadingSubmissionViewSet

classroom/views/reading_submission.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from rest_framework.viewsets import ReadOnlyModelViewSet
2+
3+
from classroom.filters import ReadingSubmissionFilter
4+
from classroom.models import ReadingSubmission
5+
from classroom.serializers import ReadingSubmissionSerializer
6+
7+
8+
class ReadingSubmissionViewSet(ReadOnlyModelViewSet):
9+
queryset = ReadingSubmission.objects.all()
10+
serializer_class = ReadingSubmissionSerializer
11+
filterset_class = ReadingSubmissionFilter
12+
ordering_fields = ['exercise', 'submitter', 'submit_datetime']
13+
ordering = ['exercise', 'submitter', 'submit_datetime']

0 commit comments

Comments
 (0)