Moved year level endpoints to schedules

This commit is contained in:
keannu125 2023-04-22 15:31:58 +08:00
parent d365284fad
commit 97f8f6b9bc
6 changed files with 55 additions and 8 deletions

View file

@ -0,0 +1,19 @@
# Generated by Django 4.2 on 2023-04-22 07:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('schedules', '0005_schedule_max_slots'),
]
operations = [
migrations.AddField(
model_name='schedule',
name='year_level',
field=models.TextField(default='Placeholder Year Level'),
preserve_default=False,
),
]

View file

@ -7,10 +7,13 @@ from django.utils.timezone import now
class Schedule(models.Model): class Schedule(models.Model):
name = models.TextField() name = models.TextField()
subject = models.ForeignKey('subjects.Subject', on_delete=models.CASCADE) subject = models.ForeignKey('subjects.Subject', on_delete=models.CASCADE)
year_level = models.TextField()
students_assigned = models.ManyToManyField( students_assigned = models.ManyToManyField(
'students.Student', related_name='StudentSchedule_student_assigned', through='schedules.StudentSchedule') 'students.Student', related_name='StudentSchedule_student_assigned', through='schedules.StudentSchedule')
professor = models.OneToOneField( professor = models.OneToOneField(
'professors.Professor', related_name='Professor_full_name', on_delete=models.CASCADE) 'professors.Professor', related_name='Professor_full_name', on_delete=models.CASCADE)
daytimes = models.ForeignKey( daytimes = models.ForeignKey(
'daytimes.DayTime', related_name='DayTime_full_name', on_delete=models.CASCADE, null=True) 'daytimes.DayTime', related_name='DayTime_full_name', on_delete=models.CASCADE, null=True)
@ -19,6 +22,7 @@ class Schedule(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
self.name = f"{self.subject} : {self.professor}" self.name = f"{self.subject} : {self.professor}"
self.year_level = self.subject.year_level
super().save(*args, **kwargs) super().save(*args, **kwargs)
def __str__(self): def __str__(self):

View file

@ -24,14 +24,14 @@ class ScheduleSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
model = Schedule model = Schedule
fields = ('id', 'name', 'max_slots', 'subject', 'daytimes', 'students_assigned', fields = ('id', 'name', 'max_slots', 'subject', 'year_level', 'daytimes', 'students_assigned',
'professor', 'date_created') 'professor', 'date_created')
read_only_fields = ('id', 'date_created', 'name') read_only_fields = ('id', 'date_created', 'name', 'year_level')
def validate(self, attrs): def validate(self, attrs):
students = attrs.get('students') students = attrs.get('students')
max_slots = attrs.get('max_slots') max_slots = attrs.get('max_slots')
if students.count() > max_slots: if students and students.count() > max_slots:
raise serializers.ValidationError( raise serializers.ValidationError(
'Too many students for this subject') 'Too many students for this subject')
return attrs return attrs

View file

@ -9,4 +9,8 @@ router.register(r'schedules', views.ScheduleViewSet)
# Additionally, we include login URLs for the browsable API. # Additionally, we include login URLs for the browsable API.
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
path('first_year_schedules/', views.FirstYearScheduleViewSet.as_view()),
path('second_year_subjects/', views.SecondYearScheduleViewSet.as_view()),
path('third_year_schedules/', views.ThirdYearScheduleViewSet.as_view()),
path('fourth_year_schedules/', views.FourthYearScheduleViewSet.as_view()),
] ]

View file

@ -2,7 +2,7 @@ from django.shortcuts import render
# Create your views here. # Create your views here.
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets from rest_framework import viewsets, generics
from .serializers import ScheduleSerializer from .serializers import ScheduleSerializer
from .models import Schedule, StudentSchedule from .models import Schedule, StudentSchedule
@ -11,3 +11,27 @@ class ScheduleViewSet(viewsets.ModelViewSet):
# permission_classes = [IsAuthenticated] # permission_classes = [IsAuthenticated]
serializer_class = ScheduleSerializer serializer_class = ScheduleSerializer
queryset = Schedule.objects.all() queryset = Schedule.objects.all()
class FirstYearScheduleViewSet(generics.ListAPIView):
# permission_classes = [IsAuthenticated]
serializer_class = ScheduleSerializer
queryset = Schedule.objects.filter(year_level='1st Year')
class SecondYearScheduleViewSet(generics.ListAPIView):
# permission_classes = [IsAuthenticated]
serializer_class = ScheduleSerializer
queryset = Schedule.objects.filter(year_level='2nd Year')
class ThirdYearScheduleViewSet(generics.ListAPIView):
# permission_classes = [IsAuthenticated]
serializer_class = ScheduleSerializer
queryset = Schedule.objects.filter(year_level='3rd Year')
class FourthYearScheduleViewSet(generics.ListAPIView):
# permission_classes = [IsAuthenticated]
serializer_class = ScheduleSerializer
queryset = Schedule.objects.filter(year_level='4th Year')

View file

@ -8,8 +8,4 @@ router.register(r'subjects', views.SubjectViewSet)
# Additionally, we include login URLs for the browsable API. # Additionally, we include login URLs for the browsable API.
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
path('first_year_subjects/', views.FirstYearSubjectViewSet.as_view()),
path('second_year_subjects/', views.SecondYearSubjectViewSet.as_view()),
path('third_year_subjects/', views.ThirdYearSubjectViewSet.as_view()),
path('fourth_year_subjects/', views.FourthYearSubjectViewSet.as_view()),
] ]