Compare commits

...

2 Commits

Author SHA1 Message Date
Lucas
908e3edc54 continued updating database 2024-06-24 07:00:47 -07:00
Lucas
b6ecd4fcb6 Initializing Database 2024-06-22 23:12:18 -07:00
81 changed files with 197 additions and 143 deletions

Binary file not shown.

View File

@@ -1,5 +1,7 @@
from django.contrib import admin from django.contrib import admin
from .models import Classes from .models import Classes, Subject, Teacher
# Register your models here. # Register your models here.
admin.site.register(Classes) admin.site.register(Classes)
admin.site.register(Subject)
admin.site.register(Teacher)

View File

@@ -1,5 +1,6 @@
# Generated by Django 5.0.1 on 2024-06-09 22:23 # Generated by Django 5.0.6 on 2024-06-23 06:06
import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models
@@ -11,6 +12,22 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.CreateModel(
name='Subject',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('acronym', models.CharField(max_length=200)),
('full_name', models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='Teacher',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('First_Name', models.CharField(max_length=200)),
('Last_Name', models.CharField(max_length=200)),
],
),
migrations.CreateModel( migrations.CreateModel(
name='Classes', name='Classes',
fields=[ fields=[
@@ -18,6 +35,9 @@ class Migration(migrations.Migration):
('MJC_Class_Name', models.CharField(max_length=200)), ('MJC_Class_Name', models.CharField(max_length=200)),
('Common_Class_Name', models.CharField(max_length=200)), ('Common_Class_Name', models.CharField(max_length=200)),
('MJC_Units', models.IntegerField()), ('MJC_Units', models.IntegerField()),
('Section_Number', models.CharField(max_length=200)),
('In_Subject', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='Subject', to='classes.subject')),
('Instructor', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='Teacher', to='classes.teacher')),
], ],
), ),
] ]

View File

@@ -0,0 +1,22 @@
# Generated by Django 5.0.6 on 2024-06-23 06:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('classes', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='classes',
name='Instructor',
),
migrations.AddField(
model_name='classes',
name='Instructor',
field=models.ManyToManyField(related_name='Teacher', to='classes.teacher'),
),
]

View File

@@ -1,10 +1,28 @@
from django.db import models from django.db import models
# Create your models here. # Create your models here.
class Subject(models.Model):
acronym = models.CharField(max_length=200)
full_name = models.CharField(max_length=200)
def __str__(self) -> str:
return f"{self.pk} {self.acronym}: {self.full_name}"
class Teacher(models.Model):
First_Name = models.CharField(max_length=200)
Last_Name = models.CharField(max_length=200)
def __str__(self) -> str:
return f"{self.pk} {self.Last_Name}, {self.First_Name}"
class Classes(models.Model): class Classes(models.Model):
MJC_Class_Name = models.CharField(max_length=200) MJC_Class_Name = models.CharField(max_length=200)
Common_Class_Name = models.CharField(max_length=200) Common_Class_Name = models.CharField(max_length=200)
MJC_Units = models.IntegerField() MJC_Units = models.IntegerField()
Section_Number = models.CharField(max_length=200)
Instructor = models.ManyToManyField(Teacher, related_name="Teacher")
In_Subject = models.ForeignKey(Subject, related_name="Subject", on_delete=models.DO_NOTHING)
def __str__(self) -> str: def __str__(self) -> str:
return self.MJC_Class_Name return self.MJC_Class_Name

Binary file not shown.

View File

@@ -1,4 +1,4 @@
# Generated by Django 5.0.6 on 2024-06-09 21:50 # Generated by Django 5.0.6 on 2024-06-23 06:06
import django.db.models.deletion import django.db.models.deletion
from django.conf import settings from django.conf import settings
@@ -10,6 +10,8 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('classes', '0001_initial'),
('university', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
@@ -19,7 +21,9 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('w_number', models.IntegerField()), ('w_number', models.IntegerField()),
('classes', models.CharField(max_length=200)), ('classes', models.ManyToManyField(to='classes.classes')),
('desired_university', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='university', to='university.university')),
('major', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='student_major', to='university.agreement')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
], ],
), ),

View File

@@ -1,23 +0,0 @@
# Generated by Django 5.0.1 on 2024-06-09 22:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('classes', '0001_initial'),
('student', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='student',
name='classes',
),
migrations.AddField(
model_name='student',
name='classes',
field=models.ManyToManyField(to='classes.classes'),
),
]

View File

@@ -1,12 +1,15 @@
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from classes.models import Classes from classes.models import Classes
from university.models import University, Agreement
# Create your models here. # Create your models here.
class Student(models.Model): class Student(models.Model):
w_number = models.IntegerField() w_number = models.IntegerField()
user = models.OneToOneField(User, on_delete=models.CASCADE) user = models.OneToOneField(User, on_delete=models.CASCADE)
classes = models.ManyToManyField(Classes) classes = models.ManyToManyField(Classes)
desired_university = models.ForeignKey(University, related_name="university", on_delete=models.DO_NOTHING)
major = models.ForeignKey(Agreement, related_name="student_major", on_delete=models.DO_NOTHING)
def __str__(self): def __str__(self):
return self.user.username.capitalize() return self.user.username.capitalize()

View File

@@ -1,7 +1,20 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Student from .models import Student
from classes.models import Classes
class StudentSerializer(serializers.ModelSerializer): class StudentSerializer(serializers.ModelSerializer):
classes = serializers.SlugRelatedField(
many = True,
read_only = True,
slug_field = "MJC_Class_Name"
)
class Meta: class Meta:
model = Student model = Student
fields = ["id", "user", "w_number", "classes"] fields = ["id", "user", "w_number", "classes"]
class RecommendedClasses(serializers.ModelSerializer):
class Meta:
model = Classes
fields = ["id", "MJC_Class_Name", "Common_Class_Name", "MJC_Units"]

View File

@@ -4,4 +4,5 @@ from . import views
urlpatterns = [ urlpatterns = [
path("all_students/", views.StudentListCreate.as_view(), name="student-view-createlist"), path("all_students/", views.StudentListCreate.as_view(), name="student-view-createlist"),
path("<int:w_number>/", views.StudentRetrieveUpdateDestroy.as_view(), name="update"), path("<int:w_number>/", views.StudentRetrieveUpdateDestroy.as_view(), name="update"),
path("<int:w_number>/recommended_classes", views.RecommendedClassesView.as_view(), name="recommended"),
] ]

View File

@@ -1,7 +1,10 @@
from typing import Any
from django.shortcuts import render from django.shortcuts import render
from rest_framework import generics from rest_framework import generics, viewsets
from .models import Student from .models import Student
from .serializers import StudentSerializer from university.models import University, Agreement, Section
from .serializers import StudentSerializer, RecommendedClasses
from classes.serializers import ClassesSerializer
# Create your views here. # Create your views here.
class StudentListCreate(generics.ListCreateAPIView): class StudentListCreate(generics.ListCreateAPIView):
@@ -12,3 +15,66 @@ class StudentRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
queryset = Student.objects.all() queryset = Student.objects.all()
serializer_class = StudentSerializer serializer_class = StudentSerializer
lookup_field = "w_number" lookup_field = "w_number"
class RecommendedClassesView(generics.ListCreateAPIView):
university = None
classes = []
serializer_class = ClassesSerializer
lookup_field = "w_number"
def myGuy(self, user):
# Grabs student and appends their classes into Classes array
for e in Student.objects.all():
for mClass in e.classes.all():
self.classes.append(mClass)
# Grabs student, desired university, and desired major agreement from university
# Finally grabs the sections from said agreement
student = Student.objects.filter(user=user)[0]
print(student)
self.university = University.objects.filter(name=student.desired_university)
agreement = Agreement.objects.filter(university=student.desired_university, major=student.major.major)
section = Section.objects.filter(agreement=agreement.first())
print(section)
return self.compareSectionsToStudent(sections=section, student=student)
def compareSectionsToStudent(self, sections, student):
mClasses = []
requiredAmount = 0
print(f"WOAHHH {sections[0]}")
# Grabs every section inside of the Agreement
for section in sections:
# print(f"\n Section Name{section.area_name} \n")
requiredAmount = section.number_of_required_courses
amount_added = 0
# Grabs every course inside of section
for mClass in section.classes.all():
if mClass in student.classes.all():
amount_added += 1
elif amount_added < requiredAmount:
mClasses.append(mClass)
# for student_course in student.classes.all():
# if(student_course == mClass and added_classes < requiredAmount):
# print(f"Match {student_course}")
# else:
# if (mClass not in mClasses):
# mClasses.append(mClass)
# added_classes+= 1
return mClasses
# self.queryset = self.classes
def get_queryset(self):
user = self.request.user
return self.myGuy(user=user)
# for agreements in self.university

View File

@@ -1,5 +1,6 @@
# Generated by Django 5.0.1 on 2024-06-10 02:49 # Generated by Django 5.0.6 on 2024-06-23 06:06
import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models
@@ -13,19 +14,10 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Sections', name='Agreement',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('area_name', models.CharField(max_length=200)),
('classes', models.ManyToManyField(to='classes.classes')),
],
),
migrations.CreateModel(
name='Agreements',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('major', models.CharField(max_length=200)), ('major', models.CharField(max_length=200)),
('sections', models.ManyToManyField(to='university.sections')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@@ -33,7 +25,21 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200)), ('name', models.CharField(max_length=200)),
('agreements', models.ManyToManyField(to='university.agreements')),
], ],
), ),
migrations.CreateModel(
name='Section',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('area_name', models.CharField(max_length=200)),
('number_of_required_courses', models.IntegerField()),
('agreement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sections', to='university.agreement')),
('classes', models.ManyToManyField(related_name='classes', to='classes.classes')),
],
),
migrations.AddField(
model_name='agreement',
name='university',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='agreements', to='university.university'),
),
] ]

View File

@@ -1,22 +0,0 @@
# Generated by Django 5.0.1 on 2024-06-10 02:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('classes', '0001_initial'),
('university', '0001_initial'),
]
operations = [
migrations.RenameModel(
old_name='Agreements',
new_name='Agreement',
),
migrations.RenameModel(
old_name='Sections',
new_name='Section',
),
]

View File

@@ -1,19 +0,0 @@
# Generated by Django 5.0.1 on 2024-06-10 03:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('university', '0002_rename_agreements_agreement_rename_sections_section'),
]
operations = [
migrations.AddField(
model_name='section',
name='number_of_required_courses',
field=models.IntegerField(default=1),
preserve_default=False,
),
]

View File

@@ -1,34 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-18 21:20
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('university', '0003_section_number_of_required_courses'),
]
operations = [
migrations.RemoveField(
model_name='agreement',
name='sections',
),
migrations.RemoveField(
model_name='university',
name='agreements',
),
migrations.AddField(
model_name='agreement',
name='university',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='university.university'),
preserve_default=False,
),
migrations.AddField(
model_name='section',
name='agreement',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='university.agreement'),
preserve_default=False,
),
]

View File

@@ -12,16 +12,16 @@ class University(models.Model):
class Agreement(models.Model): class Agreement(models.Model):
major = models.CharField(max_length=200) major = models.CharField(max_length=200)
university = models.ForeignKey(University, on_delete=models.CASCADE) university = models.ForeignKey(University, related_name="agreements", on_delete=models.CASCADE)
def __str__(self) -> str: def __str__(self) -> str:
return self.major return f"{self.major} {self.university.name}"
class Section(models.Model): class Section(models.Model):
area_name = models.CharField(max_length=200) area_name = models.CharField(max_length=200)
number_of_required_courses = models.IntegerField() number_of_required_courses = models.IntegerField()
classes = models.ManyToManyField(Classes) classes = models.ManyToManyField(Classes, related_name="classes")
agreement = models.ForeignKey(Agreement, on_delete=models.CASCADE) agreement = models.ForeignKey(Agreement, related_name="sections", on_delete=models.CASCADE)
def __str__(self) -> str: def __str__(self) -> str:
return self.area_name return f"{self.area_name} {self.agreement.major} {self.agreement.university}"

View File

@@ -1,24 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import University, Agreement, Section from .models import University, Agreement, Section
class UniversitySerializer(serializers.ModelSerializer):
class Meta:
model = University
fields = ["name"]
class AgreementsSerializer(serializers.ModelSerializer):
# sections = serializers.SlugRelatedField(
# many = True,
# read_only = True,
# slug_field = "area_name"
# )
class Meta:
model = Agreement
fields = ["major", "university"]
class SectionsSerializer(serializers.ModelSerializer): class SectionsSerializer(serializers.ModelSerializer):
classes = serializers.SlugRelatedField( classes = serializers.SlugRelatedField(
@@ -30,3 +12,18 @@ class SectionsSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Section model = Section
fields = ["area_name", "number_of_required_courses", "classes", "agreement"] fields = ["area_name", "number_of_required_courses", "classes", "agreement"]
class AgreementsSerializer(serializers.ModelSerializer):
sections = SectionsSerializer(many=True)
class Meta:
model = Agreement
fields = ["major", "university", "sections"]
class UniversitySerializer(serializers.ModelSerializer):
agreements = AgreementsSerializer(many=True)
class Meta:
model = University
fields = ["id", "name", "agreements"]