Initializing Database

This commit is contained in:
Lucas
2024-06-22 23:12:18 -07:00
parent 961d789099
commit b6ecd4fcb6
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 .models import Classes
from .models import Classes, Subject, Teacher
# Register your models here.
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
@@ -11,6 +12,22 @@ class Migration(migrations.Migration):
]
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(
name='Classes',
fields=[
@@ -18,6 +35,9 @@ class Migration(migrations.Migration):
('MJC_Class_Name', models.CharField(max_length=200)),
('Common_Class_Name', models.CharField(max_length=200)),
('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
# 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):
MJC_Class_Name = models.CharField(max_length=200)
Common_Class_Name = models.CharField(max_length=200)
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:
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
from django.conf import settings
@@ -10,6 +10,8 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('classes', '0001_initial'),
('university', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
@@ -19,7 +21,9 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('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)),
],
),

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.contrib.auth.models import User
from classes.models import Classes
from university.models import University, Agreement
# Create your models here.
class Student(models.Model):
w_number = models.IntegerField()
user = models.OneToOneField(User, on_delete=models.CASCADE)
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):
return self.user.username.capitalize()

View File

@@ -1,7 +1,20 @@
from rest_framework import serializers
from .models import Student
from classes.models import Classes
class StudentSerializer(serializers.ModelSerializer):
classes = serializers.SlugRelatedField(
many = True,
read_only = True,
slug_field = "MJC_Class_Name"
)
class Meta:
model = Student
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 = [
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>/recommended_classes", views.RecommendedClassesView.as_view(), name="recommended"),
]

View File

@@ -1,7 +1,10 @@
from typing import Any
from django.shortcuts import render
from rest_framework import generics
from rest_framework import generics, viewsets
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.
class StudentListCreate(generics.ListCreateAPIView):
@@ -12,3 +15,66 @@ class StudentRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
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
@@ -13,19 +14,10 @@ class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='Sections',
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',
name='Agreement',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('major', models.CharField(max_length=200)),
('sections', models.ManyToManyField(to='university.sections')),
],
),
migrations.CreateModel(
@@ -33,7 +25,21 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('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):
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:
return self.major
return f"{self.major} {self.university.name}"
class Section(models.Model):
area_name = models.CharField(max_length=200)
number_of_required_courses = models.IntegerField()
classes = models.ManyToManyField(Classes)
agreement = models.ForeignKey(Agreement, on_delete=models.CASCADE)
classes = models.ManyToManyField(Classes, related_name="classes")
agreement = models.ForeignKey(Agreement, related_name="sections", on_delete=models.CASCADE)
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 .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):
classes = serializers.SlugRelatedField(
@@ -30,3 +12,18 @@ class SectionsSerializer(serializers.ModelSerializer):
class Meta:
model = Section
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"]