From b6ecd4fcb6d29d04481e08b560eab01c4151aeaf Mon Sep 17 00:00:00 2001 From: Lucas Date: Sat, 22 Jun 2024 23:12:18 -0700 Subject: [PATCH] Initializing Database --- .../__pycache__/__init__.cpython-310.pyc | Bin 199 -> 172 bytes .../__pycache__/settings.cpython-310.pyc | Bin 2388 -> 2361 bytes ClassSearch/__pycache__/urls.cpython-310.pyc | Bin 1132 -> 1105 bytes ClassSearch/__pycache__/wsgi.cpython-310.pyc | Bin 610 -> 583 bytes api/__pycache__/__init__.cpython-310.pyc | Bin 191 -> 164 bytes api/__pycache__/admin.cpython-310.pyc | Bin 232 -> 205 bytes api/__pycache__/apps.cpython-310.pyc | Bin 464 -> 437 bytes api/__pycache__/models.cpython-310.pyc | Bin 229 -> 202 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 202 -> 175 bytes classes/__pycache__/__init__.cpython-310.pyc | Bin 195 -> 168 bytes classes/__pycache__/admin.cpython-310.pyc | Bin 309 -> 346 bytes classes/__pycache__/apps.cpython-310.pyc | Bin 476 -> 449 bytes classes/__pycache__/models.cpython-310.pyc | Bin 671 -> 1491 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 713 -> 686 bytes classes/__pycache__/urls.cpython-310.pyc | Bin 469 -> 442 bytes classes/__pycache__/views.cpython-310.pyc | Bin 911 -> 884 bytes classes/admin.py | 6 +- classes/migrations/0001_initial.py | 22 +++++- ...e_classes_instructor_classes_instructor.py | 22 ++++++ .../__pycache__/0001_initial.cpython-310.pyc | Bin 786 -> 1233 bytes ...tor_classes_section_number.cpython-310.pyc | Bin 0 -> 730 bytes ...tructor_classes_instructor.cpython-310.pyc | Bin 0 -> 714 bytes .../__pycache__/0003_subject.cpython-310.pyc | Bin 0 -> 755 bytes .../0004_classes_in_subject.cpython-310.pyc | Bin 0 -> 774 bytes .../__pycache__/0005_teacher.cpython-310.pyc | Bin 0 -> 701 bytes ...rst_name_teacher_last_name.cpython-310.pyc | Bin 0 -> 762 bytes ...7_alter_classes_instructor.cpython-310.pyc | Bin 0 -> 784 bytes ...ructor_classes_minstructor.cpython-310.pyc | Bin 0 -> 607 bytes ...tructor_classes_instructor.cpython-310.pyc | Bin 0 -> 889 bytes ...uctor_classes_mninstructor.cpython-310.pyc | Bin 0 -> 899 bytes ...tructor_classes_instructor.cpython-310.pyc | Bin 0 -> 631 bytes ...ructor_classes_minstructor.cpython-310.pyc | Bin 0 -> 890 bytes ...tructor_classes_instructor.cpython-310.pyc | Bin 0 -> 897 bytes ...ructor_classes_minstructor.cpython-310.pyc | Bin 0 -> 897 bytes ...remove_classes_minstructor.cpython-310.pyc | Bin 0 -> 587 bytes ..._remove_classes_in_subject.cpython-310.pyc | Bin 0 -> 566 bytes .../0017_classes_instructor.cpython-310.pyc | Bin 0 -> 792 bytes ...ructor_classes_minstructor.cpython-310.pyc | Bin 0 -> 870 bytes ..._alter_classes_minstructor.cpython-310.pyc | Bin 0 -> 780 bytes ...tructor_classes_instructor.cpython-310.pyc | Bin 0 -> 608 bytes ...1_alter_classes_instructor.cpython-310.pyc | Bin 0 -> 786 bytes ...2_alter_classes_instructor.cpython-310.pyc | Bin 0 -> 773 bytes ...3_alter_classes_instructor.cpython-310.pyc | Bin 0 -> 773 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 206 -> 179 bytes classes/models.py | 18 +++++ db.sqlite3 | Bin 229376 -> 241664 bytes student/__pycache__/__init__.cpython-310.pyc | Bin 195 -> 168 bytes student/__pycache__/admin.cpython-310.pyc | Bin 309 -> 282 bytes student/__pycache__/apps.cpython-310.pyc | Bin 476 -> 449 bytes student/__pycache__/models.cpython-310.pyc | Bin 796 -> 990 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 692 -> 1153 bytes student/__pycache__/urls.cpython-310.pyc | Bin 456 -> 522 bytes student/__pycache__/views.cpython-310.pyc | Bin 905 -> 2427 bytes student/migrations/0001_initial.py | 8 +- ..._remove_student_classes_student_classes.py | 23 ------ .../__pycache__/0001_initial.cpython-310.pyc | Bin 982 -> 1212 bytes ...nt_classes_student_classes.cpython-310.pyc | Bin 723 -> 696 bytes ...d_university_student_major.cpython-310.pyc | Bin 0 -> 1006 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 206 -> 179 bytes student/models.py | 3 + student/serializers.py | 15 +++- student/urls.py | 1 + student/views.py | 72 +++++++++++++++++- .../__pycache__/__init__.cpython-310.pyc | Bin 198 -> 171 bytes university/__pycache__/admin.cpython-310.pyc | Bin 381 -> 354 bytes university/__pycache__/apps.cpython-310.pyc | Bin 485 -> 458 bytes university/__pycache__/models.cpython-310.pyc | Bin 1473 -> 1582 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 1508 -> 1518 bytes university/__pycache__/urls.cpython-310.pyc | Bin 818 -> 791 bytes university/__pycache__/views.cpython-310.pyc | Bin 1722 -> 1695 bytes university/migrations/0001_initial.py | 30 +++++--- ...ments_agreement_rename_sections_section.py | 22 ------ ...0003_section_number_of_required_courses.py | 19 ----- ...0004_remove_agreement_sections_and_more.py | 34 --------- .../__pycache__/0001_initial.cpython-310.pyc | Bin 1053 -> 1302 bytes ...nt_rename_sections_section.cpython-310.pyc | Bin 673 -> 0 bytes ...number_of_required_courses.cpython-310.pyc | Bin 744 -> 0 bytes ...greement_sections_and_more.cpython-310.pyc | Bin 993 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 209 -> 182 bytes university/models.py | 10 +-- university/serializers.py | 35 ++++----- 81 files changed, 197 insertions(+), 143 deletions(-) create mode 100644 classes/migrations/0002_remove_classes_instructor_classes_instructor.py create mode 100644 classes/migrations/__pycache__/0002_classes_instructor_classes_section_number.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0002_remove_classes_instructor_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0003_subject.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0004_classes_in_subject.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0005_teacher.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0006_rename_name_teacher_first_name_teacher_last_name.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0007_alter_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0008_rename_instructor_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0009_remove_classes_minstructor_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0010_remove_classes_instructor_classes_mninstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0011_rename_mninstructor_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0012_remove_classes_instructor_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0013_remove_classes_minstructor_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0014_remove_classes_instructor_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0015_remove_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0016_remove_classes_in_subject.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0017_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0018_remove_classes_instructor_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0019_alter_classes_minstructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0020_rename_minstructor_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0021_alter_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0022_alter_classes_instructor.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/0023_alter_classes_instructor.cpython-310.pyc delete mode 100644 student/migrations/0002_remove_student_classes_student_classes.py create mode 100644 student/migrations/__pycache__/0003_student_desired_university_student_major.cpython-310.pyc delete mode 100644 university/migrations/0002_rename_agreements_agreement_rename_sections_section.py delete mode 100644 university/migrations/0003_section_number_of_required_courses.py delete mode 100644 university/migrations/0004_remove_agreement_sections_and_more.py delete mode 100644 university/migrations/__pycache__/0002_rename_agreements_agreement_rename_sections_section.cpython-310.pyc delete mode 100644 university/migrations/__pycache__/0003_section_number_of_required_courses.cpython-310.pyc delete mode 100644 university/migrations/__pycache__/0004_remove_agreement_sections_and_more.cpython-310.pyc diff --git a/ClassSearch/__pycache__/__init__.cpython-310.pyc b/ClassSearch/__pycache__/__init__.cpython-310.pyc index d4bac21bdc9a101a5d431f50f93a1f19efe03807..5f2223076eceb16136acfe4f8ee7f852a42e0f9b 100644 GIT binary patch delta 53 zcmX@kxQ3BCpO=@50SKO`r%mLxVf3HqAtxD7l%JKFTvDv>oRe5w93PyTSd^ThUtE+t Hah5IsiHs1i delta 80 zcmZ3(c$|?tpO=@50SIJfB~RqGVa%H7A!p)}T9%rVUyz%cSEBFh<*eYGlUQ7=5S*G= bl$@d9l$e~InwO$qT$HR2mVk&)tk(qqrT`hL diff --git a/ClassSearch/__pycache__/settings.cpython-310.pyc b/ClassSearch/__pycache__/settings.cpython-310.pyc index eb57bbc042b5f515ebd441b709c177d0e5eae21e..3354b5aebfd9297f08af31da726692871cc56f4d 100644 GIT binary patch delta 56 zcmca2v{Q&XpO=@50SG!$(>8K9axnT&?&Xk^3@FOaN=+^))_2ZHEG~`@PE9OI&d@I| KN}hb5qZ9zgDiR?8 delta 83 zcmdlfbVZ0epO=@50SKN-r*GtLNpO=@50SHcHq;2HB&TQeWpOK%Ns-IJuoLH>ylAm0fo0?ZrtnZwklByq` hniNo!pOu;n639s`E{+dQO)N^z&@V1Zo@~lu4gft#8?XQX delta 108 zcmcb}@rHvtpO=@50SKN-r*GuG&K#VkpOK%Ns-IJuoLH>ylAm0fo0?ZrtnZwklByq` zn&gsNmYS1a020*q^>S8l&PgmTRtQc_EK1H$a7s+hPR&cvFD^>f2TMT2Crh!I0|23C BB+~!@ diff --git a/ClassSearch/__pycache__/wsgi.cpython-310.pyc b/ClassSearch/__pycache__/wsgi.cpython-310.pyc index 2bb6c793fba8c701c4e532b46c1f0a497506b525..13334c6a51729fe3e5a00c4937adb7eee2a10ca8 100644 GIT binary patch delta 56 zcmaFFa-4-bpO=@50SKO`r)}iE%*g0H`97nZWI$1VR%&udvA%OoVsUYNaB5;va)y3! KQSxL%CPM(;gAv&P delta 83 zcmX@k@`!~ypO=@50SIJfC2!=u%*dEF`97nZiA!o(YEFJZZfahMzOR?Ff^$w{aj`;h eYGP4xhJsUKa&~H7ihglXvOZV>B0gD+$q)c6`5Myz diff --git a/api/__pycache__/__init__.cpython-310.pyc b/api/__pycache__/__init__.cpython-310.pyc index d0e02333c54eb08f7e67f37c71ea16a9e9caff1d..4cb42ba85582477802100329f3c9c8128f3c77b3 100644 GIT binary patch delta 53 zcmdnbxP*~ApO=@50SKO`r%mLxVRWD9AtxD7l%JKFTvDv>oRe5w93PyTSd^ThUtE+t Hah56og**_D delta 80 zcmZ3&xSx?bpO=@50SKyp@?dpO=@50SKO`r)}isV6<@7&&bbB)z2wSPAt}U$xklLP0cGQ)_2ZNN!1Te hO$sQ=&q_@O3FIUe7sm&uCKe@U=oc3yPflaZ0s!iS8qoj% delta 108 zcmdnWe1VxepO=@50SKylAm0fo0?ZrtnZwklByq` zn&gsNmYS1a020*q^>S8l&PgmTRtQc_EK1H$a7s+hPR&cvFD^>f2TMT2Cwnty0RUqn BB!~b2 diff --git a/api/__pycache__/models.cpython-310.pyc b/api/__pycache__/models.cpython-310.pyc index 2d04664fced8c11c63e66dd152205d174a6743fa..0b57d4eb484bc6191a1567657c4ceea89751f3ab 100644 GIT binary patch delta 53 zcmaFLc#4rbpO=@50SKO`r%mKeVRW5XASW46l%JKFTvDv>oRe5w93PyTSd^ThUtE+t H@sKhAp9m39 delta 80 zcmX@b_>_@5pO=@50SKoRe5w93PyTSd^ThUtE+t Hah3r9iz*Pj delta 80 zcmZ3_c#4rbpO=@50SKoRe5w93PyTSd^ThUtE+t Hah4_khDs2b delta 80 zcmZ3%c$kqppO=@50SKN-r%&XzVN9FoA!p)}T9%rVUyz%cSEBFh<*eYGlUQ7=5S*G= bl$@d9l$e~InwO$qT$HR2mVk&)tk(npw{;ol diff --git a/classes/__pycache__/admin.cpython-310.pyc b/classes/__pycache__/admin.cpython-310.pyc index fc494f5fca3e6c6451be5b4c779f3891e98dc9a2..1cdf29c738927ee5be43b1f449661cabc8b63ca4 100644 GIT binary patch delta 196 zcmdnWbc=~MpO=@50SInxDo;B+kyn<{W1_aCRxV2vOD<~^DN?0 delta 200 zcmcb`w3UfBpO=@50SKN-r>B)qf2TMT2 e^^+mi>nEn+*oSImaoS|P_ Klsq|)F%JNwr4X|K delta 83 zcmX@ee21AkpO=@50SKN-r*GsIU}Q|1EW;>g;*wgHnv-9Uo0?am@9X8P;GC0KT&xhB enpl*aq2QF5oSmANqF-E;tPhreh))h?%mV=4{u%-R diff --git a/classes/__pycache__/models.cpython-310.pyc b/classes/__pycache__/models.cpython-310.pyc index 8361b7afd9f7544e1632c941512c4cd2d7cf32b1..6f53e3ebdcd760788f22dc8ac550f767d8e379e1 100644 GIT binary patch literal 1491 zcmah}%T5$Q6s_v+>Blh4z@Vu32-`^vowzi{kPHD)8BD;K^rq5u)x7KnR&_@q?qtgs z5EEVU4}O3Pzo53RShHj0y*-oAQ73d#x9i^Oy3cbuo1d=}c#(KGe1pc_Gt?Rzl*w2CEC}as|X^GA3tGF1#tc4R{-8p)e6O7_l399`Xs=(yF-yZlKtxN4xPMOM0yw+c_J>&_{J4lh!JrT-i=qnld5gLT@CyiP=JkkzhDwm9Tn5h9`g&w!2)vis? zdL2)@tjvTlU1tog7qNhSgRu`q7-No%NxZJT?l6>_BN21i0A0?b(S#VXjVk6}5sRoI zD6m_XE(n)2XoI$m(mHdL5@(8o*%x6n6jI`SX`?_VGlwCuPH4GAm>wICq3LoCw%U6g zs+{$p5MAFK$?0A;;q32pv5vBgCG^pnW>9ICyoI-JqgY0PeUW!iJV0?D#a$FLJA#lY zyLS&iL+zhVV8QFKR3F4mpcdvg=Q|193eY{+*Toz+xpis;4bbLA6S!uMTiiZ1g9TvO zA`rpl-iZ~oc^#lSr=1c~LRI>W*#Y?)Qp8~{cnOnocpXDNf-~)9DFa@LT>O7FNERfD z!to(dAQJ6?%jV9@E}LK&2QzaR*ieN{wgJ1-1h2=jGgsleUp6c-rgO+T-Ie9b{|#V8X@P l4*n3!xFv|n4=ZpkQH&JS?z0J}pW`qTQm8@NR@+&2{s5k(JP!Z> delta 303 zcmcc2J)e~?pO=@50SKN-r>E&KPUMqeRGO%*$dyu&OwM4GGjT~ROU=nI$W6^F(f9RoRsd^N2u@8bO3qMlN=(j9%}dcQE=tx1 zOF+aY&u5gMT*V^A$UXTcqbVc%yPMMc~|gTbaF5g_jrF#`z}AT9>+I2d>s yc^Ekug_ywNewr+k>sTf9L28infgD)`QhtlWCO1E&G$+-L5y&eB8NjJE;3K@wj8 delta 83 zcmZ3-dXkkppO=@50SKN-r*Gt*z{r?6c@CqTiA!o(YEFJZZfahMzOR?Ff^$w{aj`;h eYGP4xhJsUKa&~H7ihglXvOZV>B0l*t<81&IL>trq diff --git a/classes/__pycache__/urls.cpython-310.pyc b/classes/__pycache__/urls.cpython-310.pyc index 1eaed11809040e5e9fd365ad613e00ffd3f906ea..28b3ab31429774a7ba5f09fccaa337c5e1bda6f7 100644 GIT binary patch delta 56 zcmcc0yo;GTpO=@50SJ6E(>8K@F*3SO4r7#)3@FOaN=+^))_2ZHEG~`@PE9OI&d@I| KN}jxeQ5OKD%n-x? delta 83 zcmdnRe3h9ypO=@50SKN-r*Gu;Vq{F39L6YT;*wgHnv-9Uo0?am@9X8P;GC0KT&xhB enpl*aq2QF5oSmANqF-E;tPhreh)?ci)CBpSNp78l0{rzRF9XXqCf LC2zjKxStUKx+W35 delta 84 zcmeyu*3ZtJ&&$ij00d8^(>HP#F)}7ku49xlaY-#p&B-swP0cIO_w{mCaL!3AE>;Lm fO)N^zP;g32&Q8rs(JwAa)(1;K#5Zqc+|LLACk7jc diff --git a/classes/admin.py b/classes/admin.py index 86bda64..b5f4638 100644 --- a/classes/admin.py +++ b/classes/admin.py @@ -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) \ No newline at end of file +admin.site.register(Classes) +admin.site.register(Subject) +admin.site.register(Teacher) \ No newline at end of file diff --git a/classes/migrations/0001_initial.py b/classes/migrations/0001_initial.py index c26f13a..b0db2f8 100644 --- a/classes/migrations/0001_initial.py +++ b/classes/migrations/0001_initial.py @@ -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')), ], ), ] diff --git a/classes/migrations/0002_remove_classes_instructor_classes_instructor.py b/classes/migrations/0002_remove_classes_instructor_classes_instructor.py new file mode 100644 index 0000000..1bc84dd --- /dev/null +++ b/classes/migrations/0002_remove_classes_instructor_classes_instructor.py @@ -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'), + ), + ] diff --git a/classes/migrations/__pycache__/0001_initial.cpython-310.pyc b/classes/migrations/__pycache__/0001_initial.cpython-310.pyc index c9ed362d6bdc0739a6d89ba9ca77539225fc718e..fbab214627cc6c7222f90633dd309b28fbf96712 100644 GIT binary patch literal 1233 zcmZux%Wl*#6m^`;RVaEwK zauOQ&r8zCk&@8ObGRQ;1O>Vs>+yXP}y)(leH}=S|_Z@x6WJr})q=|^?v?`_Q7ZrzG z#(HkCtRmRJCT|#oK>L@Faw9Yo5?av9`kZnT?9AZ?R*Uy||HL|=+(w(r9qyhOh`dFV zn0)Dkw!Z#_zRQbjK3GHxzAG2{t}e3q+CS(L*dM%)1ow0KANv(VOWqdYwZ<-Z0ott7BADnQv$EUNOT`2H0WFf=e<(OZ^7nbb4o z9yEF0(lC)$OYa|~kaMZ*eTd>22<2_1Le^}e*K(gmXG43OM^b`RgPq4?)`E_+Hm-`I zDi=+zraUjx8rgd&3C{|fG{sb}zFo4p(BqZ3TXG~j3-qB}TnA+k$NR#`Rf-M~*<&I~O=!X7wSwjMI~(xiNXdFk^kDw9f4K2=UD z1=TBWbC*qa_aALf9xAUog!u*fM1;PJZTBk-W>o<}-o%j%HmkTPpsZyu#_a?zVERl{ z`gov0M~&@4B;r{hMI6k-7@S|sV10f4Hk(Tw9UcjN^=)kO4t5T)C{~LaSLnbP81%Pw zYB?7p59e=Tr9Z7x=SREFu&-`*B1e2W>Ry1+nNl&tA1L?ld>h#|n62-*+-?+TwsW^j S);)YIh{TtRICRyxX8r*yYG#T6 delta 379 zcmX|6Jxc>Y5Z#$w^KnTIL6JZ-1Pk?S4#83+7(o$|CRSG%j_l@)-bc7if?%nYV38bH zYw6Fh($@BRi~Iu-QTHz33^U8l+xOn=dw!bHgHlN&Dn2SsPvS&h-Puq#PB^&40}DK~ z5XceX$muQNRKNwjp%&$=O^k(ELY?r_`%Y*N`+DXOs_9oE?Y)%O0UboK+IL;GYQueHEmy`=!I5y55-ux!N3##&{Qt9)TP!IcGx|y z9oXGV;d4`lT{8vd^XQXq8JXluWz}+op-P6Zj5_F`0e-We+;7Mf*fLmj$12C)B{p3mYbQjsq#_mWC4lWB5~Ru z!i}H7Z}64V{sa&bjI&ukg?&T`81Rx+ zJmZzf1ZOW92nfC~2#{}s%ODFtF4#1@rn_t^Tv8QlquZjXts7MhU}=ml`J9fO1rMppvH5M9ZEiF+nFWY!{!;0`r0aq*j5b!ugtm)csi zZZezA9;>1*+CrBmBvF^Vs%>k!ylspd1Fm#ew%0$1nF{0EBOm&sDzRR-oAaq8=&h() zSLkG)!&QMLxZ|Bci{=8=P{rL{VD9~^c~>pbI7#ZW`80Ns>c3aYB}!4fu0+~TlzQLk z(%19|aECQuofl{gy$*BHbAWTNWdaZ5vyC=Ac1g3tVb?%yz_-k+%9oJM#%wEstTFkAO# zPj;V-|9wUj_93N+i9r69q2Pi~DC8eG+V7)Z{p~poIEJmR*Ubqmd)K|!p4|Jo**&1D SE_!-1zh~SFdBtOKFZc&9pva8? literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0002_remove_classes_instructor_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0002_remove_classes_instructor_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3206afb04291b6afc1d359e2b85d1153b583c37a GIT binary patch literal 714 zcmZuv&2G~`5Z*s0j+?5Sio^pTeBm)e1%^F_t zMihdxR}2KmFAOB|rTi=l3F?eZk{{H|CL&}_HFu_~Z0p0Iv4FKNW9hD>6daNICuEQn z99SWM&v_wHEt3cUY9q)WL?4IC6cQM~a3dhy$hjy+Fe1<_j81OQ2zpr7#(VT(Je$oP z>8h=|%G53)kdVD@edpF?XI;N!Tuis7!Jv9OJV#S5(0w}C4ViY^1a*%c)}}+)_KVI= zq>CrGQJkDyR#?L+EtBfLL+g-fO{cGGB!8^+`?aYfN{j$k*aEg?h29bSEbP6-#(u!# zI3}de0ea8LSUWf|?bW%Bc3aQv3U~B=W$rL;5zWu*d|?~R>vd^-{?eA~2HVc(FX+zv z9bUX~c8O(7M2hqo8dolI@5+34ZhrgQa$@hXcKuR%S0*xV==)DBs# zc?+JwS5Es1NU)64!q(A@=9`&}KYw;L97fEo?;jURF!r+rN6x4CjLbYD2Ml=53ZC#n zB!aUS3E=Z1RONZ6>zmRi+WRT|qZD!|;Nu5`RY0%v6AH92Gn z2bKunOP+Y>uRCr7?5=y@)7OD6^mhJ2KtQK_ZD z)Jt<^3>rJ0OeT-z0m-a1wQkb7(*IKiQ^#DEO)*Dpd$VS~rj!*Kyt%aE<;BRi1J%@( zOf{++!S**gE0o^Kceu5oL7k~Q`;2z*0rk8xC`(nK?Wt5(<+ix_K?fdj5=niMIhM3q-})WF z?~4)}E#<-f`VW4{4SSp6*3@#@%?g&pmPK{RPK2 B*dPD^ literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0004_classes_in_subject.cpython-310.pyc b/classes/migrations/__pycache__/0004_classes_in_subject.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6498d209200df4d990480131b13859694fdb809b GIT binary patch literal 774 zcmYjP&2G~`5MJBs-zK65gbEVebFm}Au|h>uDHS3`3KEhpE5|cQZTTnc+MsfUYafIo z55Y_9l~Z2`DUq8QWo|ugN?t=S^Q*c72LUO>sC|GRJ z*DTD^imj5z++b%6Ea2Z6aI|v!n-$w&tk}%HAq-p2OdXWjRwhkWS4ul&4OpnOJG;Mp z3Qow>F*)p6ViSz55nIS}8%(g!$z9^`azA(SAU^;b9B{8Wc;H`is+>STya(EUx91~r zH!TvSQ0d8hK7TG$yUsCfq)jwBIIqNNNZc4*!X2Zp4@Oit*3Y$EMgYE<-^Miza<^?O-&+EJpD zRID(O>1Cv38jWg2cY}^d?H6Lqi>%rUAMUPX_o`en^^ly$OpD)g+cZq$h>ZXBZu^Rv yqaP2Qgs={WXA|z*kw*m8{{Qn{lwOJ+d)L#jd)8HZ$Ai2tyHP8r<2DbCN7g@`L)?x4 literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0005_teacher.cpython-310.pyc b/classes/migrations/__pycache__/0005_teacher.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..140e0e8bff45bea49c42781eed8f65048909d986 GIT binary patch literal 701 zcmYjP&2G~`5Z+xoj-8*1Lj@Atk$kChfEz+BiHbP1LTV)>UsfB>#BuOX*mZz%g=-#! zD^I~Q?3GhrfkVoy6V#41qxoiM=jU5DVbd7;@&OgvRK$bRpeT=MN=CaR1IKhGI#V)A_AwRW<~~C z%7LW%{zQU}v{cBX&615ctT%TL2U_;qm zko{Lfi4`E+H;Z7n<77>QO{jz8%>u= z@7+PO#sm33nSM&So%x$4%cjDl++@lmvnJbAShpsbQpw~4&fn|CkwO7So4i7$vt?p* zmK>N%?jJQFMqkQy&)&)UM!UZyAT`HiLMA-_&hH6+ERML?`MdD0%eW+ZBUq_AZ%$y| eE!OSQ9o|p6_nuKD8@}38^qRZkuFE6w*!u^)oWqU) literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0006_rename_name_teacher_first_name_teacher_last_name.cpython-310.pyc b/classes/migrations/__pycache__/0006_rename_name_teacher_first_name_teacher_last_name.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4998c7f48360dc101508184b5cd8d4599706eb01 GIT binary patch literal 762 zcmYjP&2H2%5OxypZj$awJ#hk#NPB7a0vAwKRJ2@Rg{TlxE|!~_{gaa{cGAMRT=zjZ z^AbFRublb{6$r*oR;?qCzVS?EzWMBWGD#V&Pd~4hFGI$DJLlozE+h_a(8d?cgZc_Z|HopQ+F1DNLfBLYV$doi zJQm_hE0yEoJir}RfK{r$iP-Xof%zZy{_5)^=72-3!y!o zZj@eRvGnTt84gEOuJK7HyKmY(upw>pluXRRi2vh*FmNCL+o7?;f8slzyO?sDz*bhP h`UEb$4t`)CydSPZPpGDiUv-L}2Cj|kcN{*7{sSi`*PZ|X literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0007_alter_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0007_alter_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26e9a37e4917adb69c26bf6f054a160eb44cee28 GIT binary patch literal 784 zcmY*X&5qMB5O!=QO+zaX5|w}_=q2fep94aRSnaYxbdh!?q+F~tp0)`|TT8#-Lbzm4{f z#r*j6-O>EeMrs4QwfrFZ2^Mhb&*x;VYDlVWo|$A{<=YyX)+BFnamgoGeAKFhymNHq ziWA6mzD|tJlN~3??Ya}>{e{Rnm|_SewtV=;{E}}*CXjim}rMLaYv1#!{y%2)&D*1ZilaWl3#mW=b-CMA9xe?4-W$4 AS^xk5 literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0008_rename_instructor_classes_minstructor.cpython-310.pyc b/classes/migrations/__pycache__/0008_rename_instructor_classes_minstructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f1fcf5f037fc46a2aabd1020fda4ad2886de8d8 GIT binary patch literal 607 zcmYjPy-pl45VqI5cgq3=6zOPCnrrZNP#}Z^N|Yiff+Es2*5a8Qd-ARidsl!`hBgn9 zIz12KmMX7+gkZc}xEpImGvCT zXIU%^DP+F|Ap;mt*N2}5m4@6m^y@p!ziO4FiK3rtmwZ(XNb>s*{Z6kpzf zuwE~Nk)Rfa*s{RO(B3cQ_mzC?8rm<{q*ma7^2??%! z3=W)m7Y=*n)K>rm%x==82UgnI*_oYhXXYC@7$hF8@88~^eqo;X!(MJKPM2-kdPD*| z@GCF#>0}kFgDj|d#(i(kg8=wv4>$&8_$kOj@Q=JwOaFe#sd46F&=(mmx6w$0Z}ZLwbl&8AAuVWl~0Euk1qvF?26EB+$F$ z6P692PdN-s_to{^lt@%mxz?!7YKr4mcOsMj_XQbMLzAFN)v zifk3ah8yl=vi4v3HX=I4yf{Pk;r0@A)GiD|ZX&?bd|tJtD;q&T*rMqxtnwCN0m@pr zJLD=RB-OQW;pr4BFdH+48r3;cn1dJ(Z<$!QAR$a51od}bA?bY~-p%vMl}IvEwGt69R+;*IeSj4GEzls{RO(B3cQ_mzC?8rm<{q*mXeVhUhg9 z!i5u0vsX@i1wg>8lO`1_?dfB)tE3#fiI@5)iU7E)vEZb4NDnY9BIsbZh>Nh;DtZt?1l@&z7`7H-!qYzV z2t(g?UtiZIAYoo+#-OoJMx)VFsj*TYP_B%!n%1V#^Sn`dZQGc1K)`H#xb|rqbIr&) ztI_Nsd0apk#?@C38`9QCK$t3tzOX&49_0-j~_vawxNOG)cd876Q zLPwNIcU`*RY>Fk=?U_b{n&7Wej0d-DB-QDS(_fi>=s-L1^K){pDoo0Go|$A<T>jbNb<6rbrLf)gdppH;Ty5;8@1^$0c}LHdd^~r5!gNSPeA~O@{{zpE B3CREe literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0011_rename_mninstructor_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0011_rename_mninstructor_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7573b992775766823ffa410e55b9c636ba6e2bcf GIT binary patch literal 631 zcmYjPu}&N@5VhC4$FeyJDENSg<{Eq`Z4@B|fhdBaP#|4nEuP7-r(OGE--4(~n})xj zPr0+w*EhZ{Cb&XP#`gwhBh)@$b#gd(POu7_6U^fiF{i7#Q1o~tXm$%&D^oTYa$Ca^8NBJx8I6;x4k{H2rKr5Ek?>HdUu{{(i!lP6 zqX9I!Lhq9J*AG81CXXwuAry9wONkzs+opWyo^R!qZBW*&F1#{$;b%KT%kog^QIZH(Pnq~=) sU;2{2cKI_>XcK0onc980?Dp#TeuH-uTZH`cyEtFyaWNm2A11rv4b6bG3IG5A literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0012_remove_classes_instructor_classes_minstructor.cpython-310.pyc b/classes/migrations/__pycache__/0012_remove_classes_instructor_classes_minstructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d48d3e899e48866ed277072dac69f229f94b18ec GIT binary patch literal 890 zcmZuv&2G~`5MHm>vEwAr6QUA=bA%MPoKaOo)gK{JL@OcrvT{AsG?wiRyG~I#A;C4T zfz$`!W%kO6R{#XeI%(4bEA8y;?98__^Nkt|Vn*xw+lTY7oU!lja(4;3?9w(P62QPK zS?bZrOJ4b@Ux`$B?0|s};tKy!*jjQQIXU$aA#&#+NSeo3u z-CZt^UE1c51h&7V9K4B_`Y4J3xcg(lN$-#zU|2-Z!EO;3VbLr45JCjqg@71(3o+s8 z0Q!`}z;<8X{7s33d6^l5#y;KJ+TNBL>#Raq)zjKEdY(5*%aw;*n{+@K+4$(zr>)3U zAzio?t?X562kp6t@D#KB0`|B%8nDi% zXf%<{Z0{{r>Js-`;OGTFt7+f8#rsO*bW*>#~>H6XzX0U(&JTM#6Ml4t&FV;Qs^C CZ3T(| literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0013_remove_classes_minstructor_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0013_remove_classes_minstructor_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d412dfe3a85cf3e6092aeeb3e08c223805ad001d GIT binary patch literal 897 zcmZ8f&2G~`5VqIr_@@cdewGj zyAgF(q2aBJ*ZynQMg-@W<(H^F++NlhGz&wYn*i`4o0W};WGyHWHfXvE%dA0IBxQ{} z>~j@TCKcIq{>21KFxyjw8Wo{mrWp2bnNYMrLYPDbM=iL#c2wu3zAl=|GXyV`&(SOxU6&MooNhDu$=$$0x%h z6U!+siT>iKhZeLIKR+gyvcjaC<(WvEwAr69R+;*IeQPJt9;@)gK{JL@Oa#LMzuZO=H>Ku5a#z`!e6 z>e0zdUiqnCiBx!OkAV;33j=|E5q$R30K6kM3@#~#jfdRE)pVk>W~ypqJCy<~P43>V zFNb5Bw%I3vZIzURH}O&*MG*jZH7+>m9nu2~iwHW{E#e|9dPN^Xh@g8RAco$BnDBG} zeZnxX-IrIj2}qcinK5YWqs`5SkEO;+y+^q;%4%AhM$hv`>6LA5(g6Xp@xjWcZOk#Ra6TG^}C4ws&b2#+z#&rpB7xvVp47KWj)A>e5?FB{ucwWLhgpzUicvj$<2l{ad4 zD0D=bbl0T|PN!Ic-I!@Ks0sZt#dvtbMzRf((#BHKoaZHy-k0*-JS!bMcLSVZ4Or(> zG@3YPw)eW7!)}{6dIr#H+IMg9uF^Q2)GzSdcA&`WiLx9{Y}BG9Ms2)vD94A#`v>Da z8><;EiT=v;eFxf!pP!O5Rbf)j^UNeWDxX(aHzs*b(@Wmq$t$f2%$>o}BablC`B`Fg zo-9X}tUpjf%x(S8+?u5oao5Nk&Ca#^$RTZWk3__{FaC;vd)yO$gmC9=r~i(AwVuO{ zy|ZX`1Sg}#j~!igtnX3^+g-i4Lu{wj#;)65Xb+rs^khNDQ}-oIheX6Tyj%W1%oqs7 literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0015_remove_classes_minstructor.cpython-310.pyc b/classes/migrations/__pycache__/0015_remove_classes_minstructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..deee868422494c0137383e2efff3dbab317964ff GIT binary patch literal 587 zcmZ8fu};G<5Vf7Ow4n$lK7cJt4G1=bkU$^?5P|`zixupnO%=z*Za~bi@*(^HALEsY zUtj>vX=w{5`Q&?des}j|v$B#9wEMS*+nf^e9)d-SF*v~EHqa@eXhAgXQA$pTVk&wj zDgruWPf?Gl_==>B53D08^@+~=HXG-rbTUAT_J?-DK_o?~7Xy8R9GslmNtTdEk#}9D~ehoJl)(k-gAS^1bAhUA7ot1pLB%h1RQG?z8 z8Z0c_9X;9z8#nQ|HFPb)qWC**Fv@8B)%vcp=V|2IYM7OM(^WV1CN(~vd2$N`zO^@z PV;?^ZaY4`yTaSJKiua;Y literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0016_remove_classes_in_subject.cpython-310.pyc b/classes/migrations/__pycache__/0016_remove_classes_in_subject.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2005c8930e8e11a1338889a106f8d2bd8652ccc GIT binary patch literal 566 zcmZ8fy-ve05VoDPlmLQ>6^SiN4FgOFA%Q>)AVh_bx>%`wlvIgb>;%LND{sNV3-B;r znRo>T$~i6K=OmwepYOiA?_{&Iln}J%*So6=O2}IXep`&e9v-)jP7y^5Qqn%9Z6lJbmWoua(YeOTS9Ba|52P2Rb7AK`q zPzars;N##=(>dP}4IqS1gusNl0K6{>aZ_hSND7gHF=z!^=HM&~%nRpD>%$xhH1NioTsD@3)wh7DCLZ$UeR@!)_1T1vc#&%ag z#wm$DCWReJVuQ7?5(jzif(;IO`G7F|JjlH~%=f?r4+gg!dQJce~qgStm!cu-kv2lu3C3G{(F{_nJz$Uz?bgi1Kmg>%G9fNC3vn8tUPc|h{ z-8;tI3;^e8Q`9Dqm7uP$Ml)1cq&0%5(h`kb%LyfhUDLgbcL8_4!UD|xTA@Zo587Nc z9gmDJx=bNVCN*M#qf*7GToes+_KqiBz~+R3Grh zc#x;nLK+)p#_t|VvoPV=rI=n`zrUECn^3NCGooKiy`T#^b&v5bqz#P~DLJ}KF9M~;?cafPYMma$e@ykRST9DPjuzu6&v%X758QSCn)km#qRd}cfR zfxEV4TL&ckum8|xj6L(b?<9g*)PJOC+m1S*QWN}-ccgSwbhVE?^{2x&+duBKutSm8WbgLFcE0qeVx=Hr09S*%kESkJV!=3Ea z>j#&|HXJ3TM;i6`q?8lzB6ihQYCk9a^HzBs&LUa&WY_KiM^joa2hk zZ=QN&L0j?jQ+g_EOshqa>vTsJiyE6&r!T2{={r1rqhyJNbyyC>A?B($O|>f0Rm;-# zl%zz@mQW7ye^|P9)obQP^K)gVHKMH_l88MP@V`7{KJ)n>&h2^6>c8V(?&Yv!?k_(( vg5%M0EJs&ARu3qJ>0aNvCc199*!8!U+GG1Vezv6Jxg81JArZ3;|4#4^7|#7U literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0019_alter_classes_minstructor.cpython-310.pyc b/classes/migrations/__pycache__/0019_alter_classes_minstructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b64ba79ae60be75f7716c5b19a157c1c05e6013f GIT binary patch literal 780 zcmZuv&5qMB5O(bRHQS0GiIspS=p|V=EfPXobyHzHhMrT3Mko^Tdq>ixzXaz3Rds*9D%+Cnzk__Y*J>D>Bm zuMmwB6n%^e`YI_E&dNy{xTPnkVBnVlgypF8%cwjMuJD9^#YAw$FlsD9tT{5Hw>P!0 zaFAD-)}YPPqoXIsTtO{A0pEhWXmqQ(yp?JP)q6~N_z-hYzurZe;5}sd8q}9N+biOB z0H(~0WW%vBXu*sXR9OpxH(3pawi4Y@-}ZpGJ?>o;P>J*D#Du)ZIX4mK7}r&R=P~CW zyR5RY))KIRMnIDnpcRgam}pkDpw8?qiuJ&mR8Xv%H*jfuQD)6b8Y-41?B9j#n_xa$ z%x9-BO(Zw4oyd2h9$|K`{#40Y){sXekAkbo^s-zV>Pi+O}Rt>d-O@F6sCuy+OhgrEdGm#D_5gTw@E^ z>KeUEhNkZ@Ca-EV5DL4-tr*{#dqDZY{rM=Dwn1rnU3vM^>b}9Y^YR4^CEw%CTW43O zBN5kCGpw9mO7FDX?ke{p%d$K#l^dEKO0bhkxcm$O8q_i2{!_@#gI p`yqc#0*zr+wF`R&H^W*3zh7X3Vu_GH-)M6|e-ZOh_et_l`~xp*swMyc literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0021_alter_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0021_alter_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98d6e5e5aaf70df6aa394cdd75a6f2dc5b8dc6bd GIT binary patch literal 786 zcmZuv&5G1O5bkvT;|z*|KcEi~56S3JM0S{UMZ`rILCB@aq-$mpll0h~AnR4H`yjr7 z&(c><`wD`r)yeG69&G4J*Vk3~s=jJ5okj$g{`GZzj}r3RI5(Gr&Jk{vpy7mDHOVae z(wa7QW;ageSmX`iHg|py?topn-|fuh){?~T1?G^`nChr0H!|-^(JJjVfb;`WQ}zA{)!E$ z{i4p50;QkMX3u9#LYp_hnzB`$?2ArFwhv$jNV-^pj^19!Tv!J1KSEw?L4LcvPf5BF zh#l>7Sm%A+=}@!``-2YjL_(c+z?q@cv=gz7N|^3P#2IjRT|&)I-Od+2LCJu%V2%TeK1X0*yP%=C_R-~I=bnd8R* literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0022_alter_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0022_alter_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69ba176f47fe67befb29a94ad18f7bab8e71c8af GIT binary patch literal 773 zcmZ`%&2H2%5O(bRvlWO#1p*!*m!$NFP}S9zB7~@r76~aAD;v-Lgd|?$GpA<+)p_F z*cY|UwUK}=v;x|416tvb@SaoK#<~5AVgqn46>L`RYq&JNsET$a4HXL$4);RcO)#6z zXVbG6CYD>+&EgwTkFa`hzdvMa*+5qJWudb(S@sRIoz7->`RqL`-YQu^X#uMzpF^R_ zb*5FB?Uc#(GtN-zGI@EdKxPQXy;XLup!?BfAEYk7S pq&NMjLo77Wzw<$tL5rbw-`BW%Y_r4XqrxY4wA#1K^qzCb{sL^j-LL=v literal 0 HcmV?d00001 diff --git a/classes/migrations/__pycache__/0023_alter_classes_instructor.cpython-310.pyc b/classes/migrations/__pycache__/0023_alter_classes_instructor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e3a8866c8c940b0e2b68ac9e83d62492039fb59 GIT binary patch literal 773 zcmZ`%&2H2%5Oy5rm#sh?_>t%X_n(s;o1k` z4R{t`IrRa!AfYl&wm%m}^29Tq$v59;%e}prp#A>&W$9Bwe%auzF$|7z=@gwH!l_B_ z;Fs34adWp}IdjNsB3!|~6T!f(yl-yq31?0c?-F~+SwcmZ=`@)m-g(g zMHn38(l5}#fRa<;teo5hR(XO77yK$fjIfF-zly7S!V|s-E|>@}T&$aj2vK7by}L$3 z=%B0%twEdpgM-6EUep~ZzRU4Vt2@<~om9$0R1?3sNnD~D!~`FpDA%CA-ru#P-Iz$2 z2?Q*QzV1vUTaJ{V12a)j7aa)R77ZBM$;3tSmhhNiL*83%pcZGzo(cJo=iJ1cV_jbZ z?kAjo?u**i+DO0_S^;gj0j-9y;;E%^YX73#VenI_V6$r9!nyH9RkSNCh3vMc6MhdNIj_BXs5&J*7}9jT;Z sk&dq>z2>7HW21>~&IervEr#A(UgK`xR);S~g^wJI>|12|zoRe5w93PyTSd^ThUtE+t Hah3@Hj5rX* delta 80 zcmdnYc#e@fpO=@50SKN-r%&XzVJw{JA!p)}T9%rVUyz%cSEBFh<*eYGlUQ7=5S*G= bl$@d9l$e~InwO$qT$HR2mVk&)tTzDwz}^}Z diff --git a/classes/models.py b/classes/models.py index ec9b7cc..70181f9 100644 --- a/classes/models.py +++ b/classes/models.py @@ -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 \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index eabade801ea2c81c8ae87bcfa49e7fb0bb2ce702..93997f52718391858f1f8ae28308fe9e31d7c3c0 100644 GIT binary patch delta 6133 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 Hah4_khhz|- delta 80 zcmZ3%c$kqppO=@50SNxjPoBta!eHlpO=@50SKO`r%mKu%jhw2r<`O!QGQlxa!Ikib53G$aeQ!UVo`F2esNLq IWNt<+0IqWo+5i9m delta 80 zcmbQmw3UfFpO=@50SJN@Cr{*F%a}ZIr<{pPYFTPdenD<(UWvZ1m$QO%PGWJfLU3wg bQF4ZYQ(|&(daZ$29SOOwG@q-os;A$HY diff --git a/student/__pycache__/apps.cpython-310.pyc b/student/__pycache__/apps.cpython-310.pyc index 97096834a1bed73c0d69977b36850b76211260ec..b7deeb48c0cca70aaa21c00dcb374394b7958077 100644 GIT binary patch delta 56 zcmcb^e2|$tpO=@50SKO`r)}gGU}SWkEW;=#8Bmm;m6}{qtnZwYSX>+*oSImaoS|P_ Klsq|)F%JNx)DXG= delta 83 zcmX@ee21AkpO=@50SNxjPu|Eaz{r?1S%y*0#3i*XH7CCyH#M(B-`C4o!8s?fxL6@L eHL)l;L%}IAIXg8kMZdTxSsyF`5uY5)mJY)t-)^KadrtC>saYXj1Y8N@izgtBO5iMyG7t{Zsg7Khu`Ego5mU?&QvVyzdpQ3+4X%m|g0zYw85|XHrM1i8 zZNVY9fG;0KkwB~yX(T0^KqTU;K#Dk6p#~Y=Oy%&~OxcXdQZUv1F-_WoesA14B%ng9R* delta 358 zcmcb|K8KAjpO=@50SKN-r>E63PUMqew3?``F5%9Q!ji(;!jQt6%9zF0%pAp@!WPV+ z$v&}4i7|Pipd_Q�$E7DNHHMEeuh-DJ(!a*2(&eVv|c5!`Qfi=KV^Ue34PE-X*mx zH7CCyH#M(B-`C4o!8s?fxL6@LHL)l;L%}IAIXg8kMZdTxSsyF`5!Wv+DNO-s$jwhl z%_-I^sJz7TM@_rB!UOTWd#y!KwJz82o44gMgc}HMjj@xxSuA+WIJYeD^_2S kTfjm{+QFuQ%(%s21GKF)C)JJ-WDp0C-~qakhf$0f0BKcKFaQ7m diff --git a/student/__pycache__/serializers.cpython-310.pyc b/student/__pycache__/serializers.cpython-310.pyc index 67007f76a48ad19e04d463463918459b952cf73b..3766b37c6422b868cc7a9256cf165220eb995ba0 100644 GIT binary patch literal 1153 zcmZ`(O>fgc5Z$%cA4!w636LWGfjPwdfC^O#DiR_QYCuT7tX%J=O?!s<;tJn z#$VbC2TncrhJ?h7owlK&Yx!w+);lwP@7ZOy+a@p$epd4r4k5pAu|60q_Te^f0R$0L zk(?%!65$9}Ik}s-Feid3mV1du$!j7!;eRE#I?Q7!Airc~Ci8#OSf2z0>8X%rJmu`AnudJBf|XV$;YGuSqrfd~O-`-i7qnK0rtq?NGf7 z(`gjw9W2{N7$6`+c4r0@9!ixir8qz$^)~L|k-IjV*$`ux7Iii~0Lbq+6fghJz_0f< zba3IheLV0C;KmeS0x$%azyTAu!UZLm9URK6%z*$Q#X}amQB`k2Hc)SO^UO*<-GL`` z0ATxLNLvS8l&PgmTRtQc_EK1H$a7s+hPR&cvFD^>f2TMT2C#y5bMzR9U zC}sl^91JXsJd8zxK&GE2OA*M$Mcg2Q2Sk8`!S*2$0w6Jveik4u1`!+#LX2P$KTWpD v|Cp7X_|@cML7kDB_*jvdBrOkiui#J0TaL6Cwnr= wNd^?Bk@rGGGI89DumkWumq{S2|M^dkSYTgC^I+wiISR zO^(TOj3M>hrA0Xfi6teeMR~<58H#v;%E831B>jy1+*JLX(&WTqeV6>?(%jU%l45=5 z{FGGv@YE!i)Uwo^`~r}mzOR?Ff^$w{aj`;hYGP4xhJsUKa&~H7ihglXvOZV>BCcOt kQknwN0JO7Mub}c4ht1@7j68fGU+^&SFbXjXF>?F^0Gfw9>;M1& diff --git a/student/__pycache__/views.cpython-310.pyc b/student/__pycache__/views.cpython-310.pyc index 93e367655f80fb7803340015d4a2e7a4064e7a75..36f406ab1e90f1f22827800a011dcf31fa650f3e 100644 GIT binary patch literal 2427 zcmZ`)-D?|15Z}FTNoQG-6X&yO+N2cq!-CS%ml9$eh+B#q;--Ova$K}4N6MW}p1re? zk)V*g`n4~i#ePixqJ7f^E%H7lZy zn)=*lU99f1cH=dkk+r$DH-}?ELfg{8o*YW(ca;tf`tnf8LcQiQUw^kKg&Y=b zTUQ?q`v($KzZmPv<{n6yp+Wn*vRm}?A@0+hJMZFVN!mY>pj!`RH_y;fNU@bBN=b#k zZqBDm$1a`i>|^2LE)I1Sg=7&IEV86Ma8BG)7J1T-0>Lq=F3ObVVI1$5NjkHDk6UX$e=@)bl(v&J)xmx#VT=d>rkm-8dJ{_ArQ^S1 zu#N^J{@U(5%`@3a%Wk4N_wsH@fT+$^E@bDieDVNtvvbEp8}G^lx=%X_x*atGwPVoU z7>%KhdlJ)>hazBA9&n>OAC?>FcpfZKMOX-pt*_4$@(|5Zf zfE)^mwC9KPC0Z9D2_D&dEOMk9dBTc(VGHL4!<@Uq!*@maBEWamaG;{s|4*}@kjXo6 zh5krfT09h(i(?Ci`V~dN2K>Z2W%t<6jj1)U2KIavOzjE7l{2wVv7-0GeV2R(?t}|| z%!PG@O`XDv=n!j>@6~cyhi;Y(a=?nJB#VNidRDWNRN9|2t-bnI zMzwF~ES2_>(Fn^^d%b>IV8yy4=no5^yy=#Zst;1c%U{C#Xn+cdnJFMV}Zjd9+KLGG6Z_-+} zsUKCj^^5hlQ$OmQgY|jI?-G9(50xUNV+)6(u7b43qMBmK3=I6orm61$9RoXn& z%t?SSgRe*|&tYZ;(Q9a+=BcQw1_o2YHL!xU@CJ}|r+rC##dy>o?g0U#8)A?Q_wo(( zG>4*F777R}N~tR19$@_+=I{(CC?FDJ9pPP*s@YA}TvqAETu*GD6|1S!+VVP6vvwZR zE^G5%uyNK*0qf@SQr&#;Ewxm0EorQ`ciboo7i#k+z<1%IgKuWn@g3rY;Xuej-oPYX LFtTO0oOSnK(=JKe delta 535 zcmYk3O-sW-5Qei&lTDhmet;ifmEx@k%}Kn72NeWCQF@VjC?UK3u$!jLrY(B$pcjvl zqyH=?4|?z~D1tMshi1vc^3J|9v$H>|FT9eJ%OwN9&#i9fgS}R&?B;c^`e=%xD#ljJ zVumncTQIh zCG;cx#pWU2OvgeFQ;eYk z=63d0xO#L@1eZV)0*l}gd_tK(KBypaUnR+4JZg9PQi)lo3s|OOD+sb{%1gzHRF2fk zx}PtLyKvY|8oHN28jVv8`vnZ;6_7e@cOZ=AG=Tw_B-(Kzq|&pNa!>ycO@aoTmb1Zl kw&w00Q0j#yW+S9da_12JV^2q zfGkd2+9MJ-4j{o3@Bke4Q7R#^ZlZ)8?d;5a^Uci8AN`k6iY?1jb%VL7aXW>^htP=Yd47OF(5OJu%=YEWN64GGoPq((LXG#7M4{XA?h zs85_G?DQ4;kuWX-pLt0TM+2J*eK__wM=px(cKgT;q96&pu>{O%6ud*mgJi~Z`Awns zlPO@72$~*~^Eu1Q;7xf&Z>?UN2%5yA2FL@3;Qm*nkmWZwf!4;fRbj-D3pmCEMUmmy zOC&k+CdjH;@7%--V*cCt0Qee~Gy>X5TxYN!W$dor=0 qXq2jym_+-l>6A36NlN6&gV6i*Qr#!d()Vh+vM#-B(n^1*yZ-H`R delta 429 zcmX|5Jxjw-6wP~i{YcuRRXa$BQgx^uBo5*%Ryqh(u$?+sV((4bm?n~>;^r^NAVC*F z+QHo);O62laCm<}{0k!JOAFr1J=}9HoO555kDTsnnktEU+p??;`A)yTP3eJ{FcN@L zpMcb-K>9MWSq8ICZcc2{&m(gbpdh2_6o80kkb!K>EDAYPXT`ZBw!FA%pnw_^!3u)u zSaQma>Z~}csTUMuYEhek7E|H6270+GHA`ISjP1aT#=h4}9>`gn=Z3Bsh8TXmi?5o5 zs}u8P;G$WtB|51R`jhOl2H8x`*>3qiZ4nu4 ICr_;Q2R@Z}Jpcdz diff --git a/student/migrations/__pycache__/0002_remove_student_classes_student_classes.cpython-310.pyc b/student/migrations/__pycache__/0002_remove_student_classes_student_classes.cpython-310.pyc index 56c2b0e589af1986abda2b6a860a71901ac98cf2..e70f22bce0d47c662c32553190bb1fec7d66c9eb 100644 GIT binary patch delta 56 zcmcc2x`UNFpO=@50SLHt(l&DMVPveFe1cIb>KSl>A(vA8%sI5n{-IYYm= KD0#9J(@p@j2oYKU delta 83 zcmdnNdYP3wpO=@50SKN-r*Gum!^k*g@(D&c6PMJo)SUc++|;}heP1tU1?QZ^;$ns1 e)Wo9X3^c-~n diff --git a/student/migrations/__pycache__/0003_student_desired_university_student_major.cpython-310.pyc b/student/migrations/__pycache__/0003_student_desired_university_student_major.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd62b587f0d57bb442ea720f369c8f438950f433 GIT binary patch literal 1006 zcmZWo&1w`u5bo*u+1bgi38JESQE!Vl6BO|x5-}u-xDg@0utC}nQ*XxPx-_~Cv!~>^s*kf=x6=R%YtkJJm`Uc;XogP3uocAam8x@ z!_JH14d5Epx2gN@mUU5)Jykb=Wvw4>Z*M;q5{v2-#o|&Vd8`zw|8)bdDbrJwDy`4- zGkW?|#CeTU#8Zh_P(aZ+EKCX$Lq_K!T>`DI1FBRatUb82$RK+p&Tn>M!tOY7bPw=2 zZt`09DI{@=HR^%HJgzBJ85gK|UG0%$&{99Ya$19XoMH}oYbH^lB)H2^ZV_jd)WaqG zRz1JbkTiQt z2YZ#obXvZ}GwneZm(xmfIMRL#iU`xe?tvH|e0cq4ysv|5hKr&4#^gN;(2C!mqm!z@ zC~uNjMY~nfm>#I;6^&i=5s%)>DkJ*o!gN#|Vl0!BNXaBxV2!$Aji{YZRxQ8Uot3Gj zC!C#0^S_vGsRtx{#%*pne;too+`3KM`LllZf3^N2Pv4oN4dE!9{~qBIvb;-ybbn=U fiEHU<-*&j?r~Ag+e?D))3o|^*GnMcy>z4fw)N?R4 literal 0 HcmV?d00001 diff --git a/student/migrations/__pycache__/__init__.cpython-310.pyc b/student/migrations/__pycache__/__init__.cpython-310.pyc index 5263f8efa28040379576055d4e6774a148e449b9..9a4ef23e4bd17631f57e5495c0aa3740b72a3d8e 100644 GIT binary patch delta 53 zcmX@dxS5eVpO=@50SKO`r%mLxVGNt-AtxD7l%JKFTvDv>oRe5w93PyTSd^ThUtE+t Hah3@HjZzTI delta 80 zcmdnYc#e@fpO=@50SNxjPoBta!&o@cL(aq{wJbF!zaTd?uSDP1%UQuWC$YF#AviU$ bC^/", views.StudentRetrieveUpdateDestroy.as_view(), name="update"), + path("/recommended_classes", views.RecommendedClassesView.as_view(), name="recommended"), ] \ No newline at end of file diff --git a/student/views.py b/student/views.py index 830b172..9c64bab 100644 --- a/student/views.py +++ b/student/views.py @@ -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): @@ -11,4 +14,67 @@ class StudentListCreate(generics.ListCreateAPIView): class StudentRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): queryset = Student.objects.all() serializer_class = StudentSerializer - lookup_field = "w_number" \ No newline at end of file + 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 + diff --git a/university/__pycache__/__init__.cpython-310.pyc b/university/__pycache__/__init__.cpython-310.pyc index f206977ced13b6f690d523a586930502fd4ed59e..286320f32f0e51c53a53275aca550f8e31633992 100644 GIT binary patch delta 53 zcmX@cxSEkWpO=@50SNL^(vEK1JMFD^=+ HI7(daZ$29SOOwG*^to?07@Mje*gdg diff --git a/university/__pycache__/apps.cpython-310.pyc b/university/__pycache__/apps.cpython-310.pyc index 82cdc0d871c3178d689fdecbd975618ba5ebabe9..4dba8bcf2713e78437a550e68355ff2b1308f5ba 100644 GIT binary patch delta 81 zcmaFLe2SSnpO=@50SNL^(>8L8FgSXuCl>3wpSPCr0R#K hCIuAbXQd{C1acCKi{pb+6N{2F^oxsB!&&bbB)z2wSPAt}U$xklLP0cGQ)_2ZNN!1Te zO>#*sOU=nI014{*dO0gN=Oh*vD+H$|7A0pWI3*@$r{<;T7Z)Y#gC!v1lOq`m0aJG* AZ2$lO diff --git a/university/__pycache__/models.cpython-310.pyc b/university/__pycache__/models.cpython-310.pyc index 36272f1b14add165b0848d612604616bea4076d7..8f0d108755ef089e7e08a62afd40e9e834682b33 100644 GIT binary patch literal 1582 zcmaKsOK;pZ5P(U&C9hxGAVt#VffOjP7wbQ1*7g^OH5-NLzc6*b%_da7Ye0^9|XouP1`O|4x57_`?Y7Ea2{7%(}HtbTO9{w&{;0wR@Kqz<@+r=@mIWa?`df&)i; z+JEb%p$^D@Xp1P~G#w}`ZN;-<0oAt6eE4vEs5jwrFQjdy1Vz*$3fiJWztWd9q@nPUeCWwrp_ z1#IJ{R#Y&s0E}qvC;YfrI)2wkVScAny!4lab1MFHr{c`ndoS;fT5d>!@6l$J^(}zJM~oO16lO z_xLr>`GUojU^p5kWH{&!45MM|)oAu;^l~(R1%Hb)WHb=-6+Us&gnDZ*AV_Ypt^)$L zp+ndtV3Cdq*p^NR*qRNeRM7LLUcnXS{ly(g{F1h`k?E%xyiVQAF){28(``~d#&~K6>7;?C%?wBHm?jiv`0%4i~>+@p;~NXbLYd z{LC=#NN&g>Gv^V00b*Tb^{m;^`~5}VSW?*O-xK8Bt^br?*RI_9{dx6DakF>iy0X!O U{uTL-A3(#o9Pst`hr#vm15vP`esuom+W{Xr=mi+<=iG%LkNK{De z(6vK#|3Fa}vLG=cb?Lw1zk!XdOZ%R~uOaP8_x1C;^Sk?epU-l?vi2aKw-g-1)2Mx^ zp4%n1a+SvSW2LJ!l@Z&mu{afaeHh_WK(9SgxQ*+-_v9N^dAbEd=nW405JvU4+l^|Y z=Lu15g2(;+>Pyc*fH0^F?$?urabA9AOYBPiVDA>PSSi*-#CZXur0_j)WJz7MQn<2# zQ#_M9>iimLT_e!Gsx31}fz?(6JxG5^wX#8`snm?v+}z^;bRVu$Nn#l>d7&=8U>G(i zXOa*#vgv)VJK#J=DdHN7LlIr6NCAml*JjF7^fpaWB2h^mkd)=2HvcNNK7^eiaM6j5 z_(RH1q@slxlsryhpcqPy71)%TWc_c&S@s%HXXPKw`1IWX^Mti5#LhwvHJ`xS2=Cm& z7p~zmP4J`6AiP88kLWZy#3%flLGeU8Opk--QoqNR>`d^aj2|bSd~~kQd*Zs-L)YD{ z75P6sT9C_n<9(d*=@$XP=co+%z#pT;rgz)8|65nV-DJO@o{@D1v&QyS#Dgp_q5fBiPFDuu(X&vmC&c>it+{(3o zf?NO6UJ-|$dqYBE#(6>lVl9unv%531-}jA+<>i3k`24->KCl`4Mw8j$;A9(L9ifp- z@{Hv?;+#oK+L@Kxk)1n{le>}2*>ffx>3(6-RlMh&*pZJOPx|QbN1hsbYO;==`p8q4 zL5H=L&M`h~akHcqq;ZxWE70ehe6|VR_S26zPX|Y){$wAN%2j`0{EkWnY0*#U=5Ph(@u9OBPwm?m3d49YW%tF7*vVq8MLW(F z7Ubk{A4>rhOHuT*BNOPX+!x(cWpb_>YgEm}wco0VoPC7zE00`hVQ%|)V?OuRt{TKG z$JAp?CHk1$T<@3po&r&H1*pR^1tmpNl%SP1enLg!M?D^c)NXmECaR-Cm_UfUkY%Ru zyCKA38D|t!2=K5rcSajw>}&hhc4H^3>TEV#vI<@Kp3@KK3t~EO)^)=5QgSb z2SI+VvUs56GlCjcX^oCdD;<7qkk3a$`qe9FFurARdc2=auUea9%Eo=$_+H#YGt~`g z=9EVcD#n%$O4mWfxY9+|JhL{@_ISg>I5%;X7#cAb@TLXio4fBA zQMiGtgx0i^XF3dSEjl}g)uOXwtgKWTr)rR3qWwi6kskg7Bq|sF1rpsB?vwee{O;mv zwRnfN(X8DH%nB$y5M98w`&7XDp|ZWI@ibJ`RXkSxxVlUII0dRwZ3T1{ZV@%6_GsAQ TkLlm3>F3^HYsgP?dENg7BV0{R literal 1508 zcma)6J8u**5VrSyo6CbEN=OQn_9)nr2BCvQAR*-n4urIgwORWvm+T|4cY~5PwEPLW z@RQt9rH*KjkeKm3mAfEz<&k%6&v?H1zAaZ*LjupQA65T_O~_CDn13Aj=)h1h7*06N zNKRu)3AebNS-BnCxf46N8@rUeBi!NcSHfLEPrPe8_QB(EA3Xlp6M!e+4e&I^o(2zl zq`h(r@kyKN6(!^_$%a=#s#}UaTZf;D;RSpTt4rN@J&;1=qNudr6KORpixiK}KTwFd z^xZB@1c@mpu?2}Kw;-`~ZN)aXA*rJ`XOVl;ybJO08XXvFYc8I!V~5iLja_a*Ecnd;OuvxVj;79lXZ; z&Z6To7g1KHiHZ)&v_>#gv=0ZO&*JDnT!^eZLuYjOet&O2OO)E{iA1KydvB8TR1`c? zGL6i_$RE{HfTKD5pPyZ72Mh49cr*cVXh`KFn09X*iQJJZXqsryJ-g^=wt>C?43?$P z1f*pd&jQYqzDXapVRxpzR{!XZ1)DoC)Dtk1ZjZXdt$_voF}=RpSr%>7A2&}~e`0v|zRPM#E?E-4bu$|Aeep~~t3 zGyGe)&4Z8+KxE%%lGt9%Z2*VfHWEl>#GrSJIzJMUm3=0~c|DYZv$U+G5=#3i(ibL; zWTN{etwFf|qcu-)8)|q&;I@Ci#aNf#=t1EhM3z*7zeV{;bM8TMZ^I!Bs*n~S5X++Y zdVgA;#IZW)Vo@N)Ds Td4<0!g?ws~P1>?r-d6K3E?Y^t diff --git a/university/__pycache__/urls.cpython-310.pyc b/university/__pycache__/urls.cpython-310.pyc index a3dafdb468f46be29e8b183595738a0d5f6f8ab9..071bba63128d080b87cf21812a0242fbd37bf609 100644 GIT binary patch delta 56 zcmdnQHl2+-pO=@50SLGY(l&C>VPf=}yn;ziGN33wD>b>KSl>A(vA8%sI5n{-IYYm= KD0%WPCJO+ig%MBy delta 83 zcmbQvwuy~9pO=@50SKN-r*Gt*!^D_6c?FZ4iA!o(YEFJZZfahMzOR?Ff^$w{aj`;h eYGP4xhJsUKa&~H7ihglXvOZV>B0l*(lLY_`3>zo_ diff --git a/university/__pycache__/views.cpython-310.pyc b/university/__pycache__/views.cpython-310.pyc index 151fd3db20309e6c3d4b0df23f53202c386f303a..2a27c438dacf8c898bf33e84e50a7c423e5056eb 100644 GIT binary patch delta 57 zcmdnRJD-<3pO=@50SNT-(>8JoGBJ8jmSvKY3@FOaN=+^))_2ZHEG~`@PE9OI&d@I| LO5U8$$w@- diff --git a/university/migrations/0001_initial.py b/university/migrations/0001_initial.py index 5885812..834742e 100644 --- a/university/migrations/0001_initial.py +++ b/university/migrations/0001_initial.py @@ -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'), + ), ] diff --git a/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py b/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py deleted file mode 100644 index 018022e..0000000 --- a/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py +++ /dev/null @@ -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', - ), - ] diff --git a/university/migrations/0003_section_number_of_required_courses.py b/university/migrations/0003_section_number_of_required_courses.py deleted file mode 100644 index 76f7a07..0000000 --- a/university/migrations/0003_section_number_of_required_courses.py +++ /dev/null @@ -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, - ), - ] diff --git a/university/migrations/0004_remove_agreement_sections_and_more.py b/university/migrations/0004_remove_agreement_sections_and_more.py deleted file mode 100644 index 8793447..0000000 --- a/university/migrations/0004_remove_agreement_sections_and_more.py +++ /dev/null @@ -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, - ), - ] diff --git a/university/migrations/__pycache__/0001_initial.cpython-310.pyc b/university/migrations/__pycache__/0001_initial.cpython-310.pyc index 8e132d6d5405ffad9425ddce996d3b4ca85a07ef..a4d2452ef0cfdafc698360b7b8b2c699e7a4e307 100644 GIT binary patch literal 1302 zcmZ`(-HzKt6!whm_-B*-X?GX8g$D>1@s?{;HO;c9LR%qi5mF>%IX)+jjeoW?cH8W2 zdz*KF8zi2A7vLG@mJ8HZD57x2&L%4;W6k)?`JeBcnQAcb4H}DIU(SE-8OHB=b9-2{ zc|=o=XaNIQZcG{ddCm)SY8KYiV#Zenm|(pzz(O;#Uz<}K*rhSF-;#~-bjX!oq=|^? zv?`_Q6%}AEV=cQq2DEuZQ@*1G+bB~GY-$2e*wjKh>**-yWG*oJZ0LcrvgRCI;(6eK zzhZNqaM)S#R=fW}?ZN+O?|x8w@3uDVqw}NxlR+^Lh`)pVY>+wGZng(^;4U1lOp+Xt zWFL;;7(QBY%Ew;ka{veM@xQF@!HKql`ztfCrgz{ILhV!KUEHAcjIeX!JdzTn>YtvT zJ_yq?t=e7z>PQ1hsP|(jpSe@CRHfPof~h^cq$F z1&UcEF)X73m0d(xCEorSSIy?f?KUdZ=PZfQu*JODVfT&UWx-!SI#BI zx~j^HC}ijEq-=^Aim;l80-rajKnUZi5&8&Tv`N~PovFM&Y&Kp;8~M;wUR8$FDOgj& z0&{($E&{JBVN>|)y)`tW^?%643Gu~!otwXPtNe{$d406ykG3Sm^V`O3Lv*LJ+hac+ z-c@ecvcpjMVMuCCjzssv@OcyE8Y0>`H!+V&XYR^=qSIs!u9q0#SjlPM0$DmeXyts4Du$9WN=o+jcz9yOeoFZJDhzZs*H+6 z4Bdg@B}O7%1X9Go7Pnw~vxD3HIl5X3{dPDsNp>o!&(u|+a z7&R|g{=nPeRM{qpU*F={;gj6f@(XGBH;i4{^8KJZA=lR)ihYsf&uyH}*5i%VhW$gU zE4YkyTMu~jOk~heGU`l--*|bOu54D!47Fy8=TM9ZJ)tf}4IH2V;UDxT_5T0zzDa6~ i+aWDK(}m^pNRwQ0(NNmEljg9OhBTj z@JqfT4*UX0h_RD4wdC=ed1KG`+2-gdXEc62uReLs*w5fR94R>`G~Ej_z<@WbfssKhG4 zbUlCsQW)Hbh=(u=n7AQiRATJMi@UQ6;YVeookQm*v)SyWs=Iny>xPKD@9HbGuHIhT zP|@daD~s4-w{?Dek0~=V4X94H=(7&L?$Hv<*u5X^(RnfQnTo7ZK3A$W&^JhUqSTjO zH{pcf0dBAZ?8+LQ6`}H@4;aXW0c?D3Hn>;j2eXffkLJ&+wyXHs>{z*Q#xD9NbKVBAb~u*ha{n1DH~f-`d*U* zyyM(n0<{Onn`@g;zeAet8JUcUMDX-qIutyv>2A&b#=P?)@ncx)t}@4P5v7Rn!=-oV W2_5CL*E>Dm&^Kf*{JV*Gn*0YN8@+M> diff --git a/university/migrations/__pycache__/0003_section_number_of_required_courses.cpython-310.pyc b/university/migrations/__pycache__/0003_section_number_of_required_courses.cpython-310.pyc deleted file mode 100644 index 197ca2ad0732824524b724a408f31f86f50423f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 744 zcmZ`%J8K(35Z=9qbUJKs5o|~rRRJ|xku)hna3bT7fZezVT(g{RM(0!R<=s1h>!fw% zUy;AGqzfth7ec_9T}jAI24qJn+9W@R6_lZ+_xKaK$F!1NE|rXX2{JRoWFzt<9in085?O(o-2wa7wDD zWRN8sSmFWCdE#TR3M~K*RznCNyyGx{;axzr2qFR+nbE}#!NT=*u|}nf?$*4S&1SEp z!aA)`rny3_u7g`LQ(cvs>NB8^^OWL zr+LK}T%6$=%ciwSaq)RRo|mcC<10*6c0K-(W?yLrp;abaVUrhos>S}uf=GY8BU1jK zzG-`_?2lz{ub+{LnCAzNLFjRh$E3mE=+Sjt60sv#rFGs+Vc|G%o4ewE#f^7DFPZ4= PhRt{OMB1VpdB^@g-Gtef diff --git a/university/migrations/__pycache__/0004_remove_agreement_sections_and_more.cpython-310.pyc b/university/migrations/__pycache__/0004_remove_agreement_sections_and_more.cpython-310.pyc deleted file mode 100644 index 43c58c5cdd3eeb77a0d7aaf327851474efa92898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmZWoO>fgc5VhB9$99@hA*ciwaznYqk?0YjmXsoa+524gUy~4F8 zeg%JNubg`1S|MQ8PLoQkw6n9bGdpkI>{h*AXwi6lcRAzSvVNM)!$CIdkfs`v01NEg zn%K0moE6T*Dfooj)_V&a;NL9Z=w$9!XX1i=ZVlX9im}cHOov4}m+>;KN~OJ`0?bun z&K`~~Z4POw6$xyzOc>a6d*UF^Two^04Qq54ytVF;-NjDkLkEK_%sN>&+W{Yf8wWz@ z-f;5wUGeS)JTix1ZxPH3LIozrPM|S{c zah)%9K>6t^T%u;n>SVxWK!MWqQM#*#&8O(lR3j3;#T@>ZyUb=b|HJvib>G;2bI;gX-T&1@4?O*> wC1eQGVf!P7_pHe0bgd3H=MB*fqfP9VomT4`Z~t}MvNz@tDUXED_UwJ<9}wOjhX4Qo diff --git a/university/migrations/__pycache__/__init__.cpython-310.pyc b/university/migrations/__pycache__/__init__.cpython-310.pyc index 91661331ca6cc35317637774e1c6b8d0bd1099fe..6db1925acafb572708e3c058aded7c0e5dab5bd8 100644 GIT binary patch delta 53 zcmcb}xQ&rJpO=@50SIh%mrvxjVT_#UAtxD7l%JKFTvDv>oRe5w93PyTSd^ThUtE+t Hah5p%jlvMs delta 80 zcmdnSc#)AipO=@50SKN-r%&XzVJw;GA!p)}T9%rVUyz%cSEBFh<*eYGlUQ7=5S*G= bl$@d9l$e~InwO$qT$HR2mVk&)tTzV$!*3cO diff --git a/university/models.py b/university/models.py index 5dc7597..21fec37 100644 --- a/university/models.py +++ b/university/models.py @@ -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 \ No newline at end of file + return f"{self.area_name} {self.agreement.major} {self.agreement.university}" \ No newline at end of file diff --git a/university/serializers.py b/university/serializers.py index 053fb90..ae5f195 100644 --- a/university/serializers.py +++ b/university/serializers.py @@ -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( @@ -29,4 +11,19 @@ class SectionsSerializer(serializers.ModelSerializer): class Meta: model = Section - fields = ["area_name", "number_of_required_courses", "classes", "agreement"] \ No newline at end of file + 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"] \ No newline at end of file