Added relationship between subjects and student

This commit is contained in:
Keannu Christian Bernasol 2023-04-11 23:20:01 +08:00
parent ac0f4b5e28
commit 5182dfa8da
9 changed files with 148 additions and 48 deletions

View file

@ -0,0 +1,34 @@
# Generated by Django 4.2 on 2023-04-11 15:10
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('students', '0003_remove_student_enrolled_subjects'),
('subjects', '0003_subject_semester'),
]
operations = [
migrations.RemoveField(
model_name='subject',
name='enrolled_count',
),
migrations.CreateModel(
name='SubjectStudent',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, editable=False)),
('student_assigned', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='students.student')),
('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subjects.subject')),
],
),
migrations.AddField(
model_name='subject',
name='students',
field=models.ManyToManyField(related_name='SubjectStudent_student_assigned', through='subjects.SubjectStudent', to='students.student'),
),
]

View file

@ -1,5 +1,6 @@
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
from django.utils.timezone import now
# Create your models here.
@ -15,16 +16,20 @@ class Subject(models.Model):
SECOND_SEM = 'Sem-2', '2nd Semester'
name = models.CharField(max_length=40)
enrolled_count = models.IntegerField(
default=0,
validators=[
MaxValueValidator(60),
MinValueValidator(0)
])
max_slots = models.IntegerField(default=60)
year_level = models.CharField(max_length=20, choices=YearLevels.choices)
semester = models.CharField(
max_length=20, choices=Semesters.choices, default=Semesters.FIRST_SEM)
students = models.ManyToManyField(
'students.Student', related_name='SubjectStudent_student_assigned', through='subjects.SubjectStudent')
def __str__(self):
return self.name
class SubjectStudent(models.Model):
subject = models.ForeignKey('subjects.Subject', on_delete=models.CASCADE)
student_assigned = models.ForeignKey(
'students.Student', on_delete=models.CASCADE, null=True)
date_joined = models.DateTimeField(default=now, editable=False)

View file

@ -1,13 +1,15 @@
from rest_framework import serializers
from django.contrib.auth.models import User
from .models import Subject
from students.models import Student
class SubjectSerializer(serializers.HyperlinkedModelSerializer):
enrolled_count = serializers.IntegerField(required=False, default=0)
students = serializers.SlugRelatedField(
queryset=Student.objects.all(), many=True, slug_field='full_name', allow_null=True)
class Meta:
model = Subject
fields = ('id', 'name', 'enrolled_count',
fields = ('id', 'name', 'students',
'max_slots', 'year_level', 'semester')
read_only_fields = ('id',)