From fc723d93fcc5818d111828a4461935859834f7fc Mon Sep 17 00:00:00 2001 From: Lucas Date: Sun, 9 Jun 2024 21:34:59 -0700 Subject: [PATCH] Worked out API's --- .../__pycache__/__init__.cpython-310.pyc | Bin 199 -> 172 bytes .../__pycache__/settings.cpython-310.pyc | Bin 2367 -> 2361 bytes ClassSearch/__pycache__/urls.cpython-310.pyc | Bin 994 -> 1105 bytes ClassSearch/__pycache__/wsgi.cpython-310.pyc | Bin 610 -> 583 bytes ClassSearch/settings.py | 2 + ClassSearch/urls.py | 5 ++- 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/__init__.py | 0 classes/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 168 bytes classes/__pycache__/admin.cpython-310.pyc | Bin 0 -> 282 bytes classes/__pycache__/apps.cpython-310.pyc | Bin 0 -> 449 bytes classes/__pycache__/models.cpython-310.pyc | Bin 0 -> 644 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 0 -> 686 bytes classes/__pycache__/urls.cpython-310.pyc | Bin 0 -> 442 bytes classes/__pycache__/views.cpython-310.pyc | Bin 0 -> 884 bytes classes/admin.py | 5 +++ classes/apps.py | 6 +++ classes/migrations/0001_initial.py | 23 +++++++++++ classes/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 759 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 179 bytes classes/models.py | 10 +++++ classes/serializers.py | 7 ++++ classes/tests.py | 3 ++ classes/urls.py | 7 ++++ classes/views.py | 14 +++++++ db.sqlite3 | Bin 139264 -> 229376 bytes requirements.txt | 4 ++ 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 760 -> 769 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 0 -> 665 bytes student/__pycache__/urls.cpython-310.pyc | Bin 0 -> 429 bytes student/__pycache__/views.cpython-310.pyc | Bin 0 -> 878 bytes ..._remove_student_classes_student_classes.py | 23 +++++++++++ .../__pycache__/0001_initial.cpython-310.pyc | Bin 982 -> 955 bytes ...nt_classes_student_classes.cpython-310.pyc | Bin 0 -> 696 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 206 -> 179 bytes student/models.py | 3 +- student/serializers.py | 7 ++++ student/urls.py | 7 ++++ student/views.py | 11 +++++ university/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 171 bytes university/__pycache__/admin.cpython-310.pyc | Bin 0 -> 354 bytes university/__pycache__/apps.cpython-310.pyc | Bin 0 -> 458 bytes university/__pycache__/models.cpython-310.pyc | Bin 0 -> 1338 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 0 -> 1487 bytes university/__pycache__/urls.cpython-310.pyc | Bin 0 -> 791 bytes university/__pycache__/views.cpython-310.pyc | Bin 0 -> 1695 bytes university/admin.py | 7 ++++ university/apps.py | 6 +++ university/migrations/0001_initial.py | 39 ++++++++++++++++++ ...ments_agreement_rename_sections_section.py | 22 ++++++++++ ...0003_section_number_of_required_courses.py | 19 +++++++++ university/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1026 bytes ...nt_rename_sections_section.cpython-310.pyc | Bin 0 -> 646 bytes ...number_of_required_courses.cpython-310.pyc | Bin 0 -> 717 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 182 bytes university/models.py | 25 +++++++++++ university/serializers.py | 38 +++++++++++++++++ university/tests.py | 3 ++ university/urls.py | 11 +++++ university/views.py | 32 ++++++++++++++ 70 files changed, 337 insertions(+), 2 deletions(-) create mode 100644 classes/__init__.py create mode 100644 classes/__pycache__/__init__.cpython-310.pyc create mode 100644 classes/__pycache__/admin.cpython-310.pyc create mode 100644 classes/__pycache__/apps.cpython-310.pyc create mode 100644 classes/__pycache__/models.cpython-310.pyc create mode 100644 classes/__pycache__/serializers.cpython-310.pyc create mode 100644 classes/__pycache__/urls.cpython-310.pyc create mode 100644 classes/__pycache__/views.cpython-310.pyc create mode 100644 classes/admin.py create mode 100644 classes/apps.py create mode 100644 classes/migrations/0001_initial.py create mode 100644 classes/migrations/__init__.py create mode 100644 classes/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 classes/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 classes/models.py create mode 100644 classes/serializers.py create mode 100644 classes/tests.py create mode 100644 classes/urls.py create mode 100644 classes/views.py create mode 100644 requirements.txt create mode 100644 student/__pycache__/serializers.cpython-310.pyc create mode 100644 student/__pycache__/urls.cpython-310.pyc create mode 100644 student/__pycache__/views.cpython-310.pyc create mode 100644 student/migrations/0002_remove_student_classes_student_classes.py create mode 100644 student/migrations/__pycache__/0002_remove_student_classes_student_classes.cpython-310.pyc create mode 100644 student/serializers.py create mode 100644 student/urls.py create mode 100644 university/__init__.py create mode 100644 university/__pycache__/__init__.cpython-310.pyc create mode 100644 university/__pycache__/admin.cpython-310.pyc create mode 100644 university/__pycache__/apps.cpython-310.pyc create mode 100644 university/__pycache__/models.cpython-310.pyc create mode 100644 university/__pycache__/serializers.cpython-310.pyc create mode 100644 university/__pycache__/urls.cpython-310.pyc create mode 100644 university/__pycache__/views.cpython-310.pyc create mode 100644 university/admin.py create mode 100644 university/apps.py create mode 100644 university/migrations/0001_initial.py create mode 100644 university/migrations/0002_rename_agreements_agreement_rename_sections_section.py create mode 100644 university/migrations/0003_section_number_of_required_courses.py create mode 100644 university/migrations/__init__.py create mode 100644 university/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 university/migrations/__pycache__/0002_rename_agreements_agreement_rename_sections_section.cpython-310.pyc create mode 100644 university/migrations/__pycache__/0003_section_number_of_required_courses.cpython-310.pyc create mode 100644 university/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 university/models.py create mode 100644 university/serializers.py create mode 100644 university/tests.py create mode 100644 university/urls.py create mode 100644 university/views.py 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 8bf693bfec2e2c51592a517d281b5eecc6034125..3354b5aebfd9297f08af31da726692871cc56f4d 100644 GIT binary patch delta 114 zcmdllv{Q&TpO=@50SG!$)6%|g?oD z&BDw-nHc#u^Rgu{ajOG$6@iFf{*x;>UJf}Em(;SR31*gR1?9{vz{o;vfTdAjbiSiz6m#%R1z;MzJz7q_U*2q%vi( zWwAFi0okmntSM~Gj9@l9kj(*Qa{}31Aa*)S6h{hoFoPz~#)N51^-Q-|3KB~)Zn0

R0h2IAB>nP0m~F@$o77$?@^G_)@YG^V0M6lJoOQCd)BPF%_{)Hf5IQ<_7w# z2t@qyo*d6CCmB$bpOuQMq00a>@r~m)} 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/ClassSearch/settings.py b/ClassSearch/settings.py index b57d4ff..7a9daab 100644 --- a/ClassSearch/settings.py +++ b/ClassSearch/settings.py @@ -42,6 +42,8 @@ INSTALLED_APPS = [ 'api', 'student', + 'classes', + 'university', ] MIDDLEWARE = [ diff --git a/ClassSearch/urls.py b/ClassSearch/urls.py index 9d4ff8a..ac044c7 100644 --- a/ClassSearch/urls.py +++ b/ClassSearch/urls.py @@ -15,8 +15,11 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + path('student/', include("student.urls")), + path('classes/', include('classes.urls')), + path("university/", include('university.urls')), ] 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=@50SKg`kg4>#DX(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vTKO;XkRX?XR zIk8yZB|o_|H#M)MSl>B6B~?E>H7TGdKPxpEB#@I>TpS;qnpl*ap-VEo){w{N_^v-l6i;+}`DnVfLaiy&803RgJgi=b9Y3Xom-QGxo* zez_D)b>M5!$W$2@+WsI<>TKZ+5ztdpr%TtFei!F9_5-#XEchhVAv*AcWfmp11EdMU zuB8F+OW--%NBVu#`xrp`(HhbZ(T)N7f%Jmk^$TpCF?L|HkptIDFlhIh&}w^XppU)g WukUGc%bBBxyWEj#rm2|9EAVTBRa(zyJG-&h_& zyd-Jw2T>%Y{$g6!Gg}qgwF;S2p%_e1-58A~IR%2hY0eaoOE=J#F{)VXF=JbJd|2Y0oD@RI=1U_`VPbZcXrqLOi$994nWg3)z~z zkVqkl14kTcpQH)bIGEo#-`G-f(<)K`YOT&;doY9@3Nk~i+ddMwO<_E{k0=9`l?|}ZFqVoor^T|!O&TTlL3xq>5 FW`8slaG(GH literal 0 HcmV?d00001 diff --git a/classes/__pycache__/models.cpython-310.pyc b/classes/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7a667b24cda28ed00d08cbd4aaa41e7f708ff35 GIT binary patch literal 644 zcmYjP&5G1O5Ux&V@-v%J^xy+{83~-3Ofjk2)Q)bbj{3$PNLljsCaX)zJnfp z6Q7~4p7s^?v{jQuQcy)#Ro7Sbb#=d5ErDe9Y`1$Z0RFKvmyn!OQumaM1}zMhoBcDPy_Zr^TVNZ?4d28?*nY=-amMW^86TBK>xb@Y za9+|V_JpdAG-rl?h2>rG2XO2qkcmtr;&E_{Z`YwubyIcwexom^Nfzh4^J97j#Y8P5 R_~hlp;}x&LF>(e^S<(|mv;g$jbuA`}s_8DeItsgp)$TEuSkOLXNg&DK>H z{(vj*O?(9O!ko;Ux%b>hrrg|ICtxoJlgT@L-|)~h4-S1;wg(`Iq?!~op_E7_xn>1V zI3*`UdeVO)(pPlqJ@Ukt!I*SgD~KUo>Nc!0d8+fJGIm94t~Jo9waRAb(=-l;J}kQr zph!X`Nf>0Hl0gRc$Pz9&sC%ycB{BX{|0Bk}#r7IviYML`2tHFNlz|jqcK%59hH9Qd z5|&H1H9Q@N%0rCOLP6rPD9TxrT0@ufSw6R;Zs0;8X5c7iWju zWStL}O1of^D=qCSG26ga@G*+7%R z?9z(CmbZ+ub1^Z{_I+t?3{Kt!ReQGXb$f`t{{E~g^uH`FJgjGSgm0xPHzE=3uumt4 BqqhJ6 literal 0 HcmV?d00001 diff --git a/classes/__pycache__/urls.cpython-310.pyc b/classes/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28b3ab31429774a7ba5f09fccaa337c5e1bda6f7 GIT binary patch literal 442 zcmYjO%}N6?5KeZt-L*f01@Ynw^w8!mr3ftuVvATr=w*qUX}cx6Damf7eFxt`kG@i_ zp85(N#L2P;2QtZg!}ooYM0L9@f-y^1tB?}%?TY`=#Nrm0nPL(|P)Rbnq?8Cx_|nV# zrB4Y^5rDr9J{q4yG(_{=M%|W7p7a&tpIC9Q2I9`rSp>JmQlX&7d@f^W1v*$H0E_VVc^L}L8 zV$1Wj8kSlb?V+b7I&j-X#RT(!x|7PmhTO!?(O%cRCn$6Zdw8zorhumEVB4sLS13T| z=8Nbqs#WRdj%`#1OqK~ZY^stngS;?oq6DxPczx7r3yA}&nHRuyvSCIitR9=WA&0wz YjYgRgrG&A2B;!7+LprqQ_h|I{2Q2S`uK)l5 literal 0 HcmV?d00001 diff --git a/classes/__pycache__/views.cpython-310.pyc b/classes/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a7d90f4d57185788b99c8e7ce090d773b8b5f84 GIT binary patch literal 884 zcmZ`%&2G~`5MKWz{)rP34jfR$J(v0gP*s#lKm}1n#E*Pgx!y_Rbe&Ci?N;Rq4+2MC zX|J5hBXDBIE=>>ZT08o7W<2}NH>-xjnBh7;ST6rKjQys={pI7~5V!e)Mlj(>RympD z5O$?od6|dU6TbATUe;@IPxh-I3mo>EiM|NFGZBEd4!?O>gq~1D=!wu1qh}!E1)C0T zusWMMwy$9$KqCszU<0}=%nj0_P%x9ZF<=l*Zs7tGa#?-_UC{scmy3r(+~zqNV3{LW z=Hi|HkKRv~^&!YY;o!~gU9oqisb?DU8s^i;hMaHm3OKhh=amwTB%E-5(d4p==pL4~ zfjV77Q5);!QrhsM0ex+t)_n?&%^gEt5dB|FKfyq2{=P|9s)AHDMQ+j~RWucBYLm{C zfb=t*o@mupPTOwz0&-ofQlpEsEd?gMEaA%RZ?AQLHEA2VHDs|9I<4<hLLCUz{=`Q}XRo0Zaa(bPuM(CtVg zKfcsR=}PHy?UA#OBLr!>kqvfJG2NUdyWzh&dHV@vZRN9j4|e`Pg@`=F+lDW@7jr;Q P*HG^XOC0*1de8iSpo!Q= literal 0 HcmV?d00001 diff --git a/classes/admin.py b/classes/admin.py new file mode 100644 index 0000000..86bda64 --- /dev/null +++ b/classes/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import Classes + +# Register your models here. +admin.site.register(Classes) \ No newline at end of file diff --git a/classes/apps.py b/classes/apps.py new file mode 100644 index 0000000..302ba20 --- /dev/null +++ b/classes/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ClassesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'classes' diff --git a/classes/migrations/0001_initial.py b/classes/migrations/0001_initial.py new file mode 100644 index 0000000..c26f13a --- /dev/null +++ b/classes/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.1 on 2024-06-09 22:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Classes', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('MJC_Class_Name', models.CharField(max_length=200)), + ('Common_Class_Name', models.CharField(max_length=200)), + ('MJC_Units', models.IntegerField()), + ], + ), + ] diff --git a/classes/migrations/__init__.py b/classes/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/classes/migrations/__pycache__/0001_initial.cpython-310.pyc b/classes/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3942628643d5765ace84ccdb7df1d64f2f9ad1d8 GIT binary patch literal 759 zcmY*X&5qMB5VoE4Cuz0<2_Y_UM5>TB<&MxUSuI+mR!9p%$^qlX(=;WCi=86M6|Q{; zIPxYugRh+S6%Yc(Y0;LkJeqGj|6_G@6cVI259V{j2>Ic_A^8YS@S6L`B$2cv6-{Zy zQbx&BBAN6)6X^k6dY`=1ll~H^u9!ImNl|3d@leF?vkIm>++ZCOs! zfjq*(hBlb|tLTO8C8aP1jAey9x9s9<dp%&rJ0T*+vja;&TYs!PHtTS$`R-9)}nOAh{s@U=)36IvY%=_ zg(!LT<5=&z;y+D!Hl^Ga7%_;x**`?A`iIXECh`a_YsIi5ojr!cuqA_V!t){06?GL( rG0Oo})Dv*jpsPRzZ!b|LOMyX38*GwtdAmR7D^DgnT-QCG6|~|D6FV(! literal 0 HcmV?d00001 diff --git a/classes/models.py b/classes/models.py new file mode 100644 index 0000000..ec9b7cc --- /dev/null +++ b/classes/models.py @@ -0,0 +1,10 @@ +from django.db import models + +# Create your models here. +class Classes(models.Model): + MJC_Class_Name = models.CharField(max_length=200) + Common_Class_Name = models.CharField(max_length=200) + MJC_Units = models.IntegerField() + + def __str__(self) -> str: + return self.MJC_Class_Name \ No newline at end of file diff --git a/classes/serializers.py b/classes/serializers.py new file mode 100644 index 0000000..928d6f3 --- /dev/null +++ b/classes/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from .models import Classes + +class ClassesSerializer(serializers.ModelSerializer): + class Meta: + model = Classes + fields = ["id", "MJC_Class_Name", "Common_Class_Name", "MJC_Units"] \ No newline at end of file diff --git a/classes/tests.py b/classes/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/classes/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/classes/urls.py b/classes/urls.py new file mode 100644 index 0000000..553599c --- /dev/null +++ b/classes/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path("all_classes/", views.ClassesListCreate.as_view(), name="classes-view-createlist"), + path("/", views.ClassesRetrieveUpdateDestroy.as_view(), name="classes_update") +] \ No newline at end of file diff --git a/classes/views.py b/classes/views.py new file mode 100644 index 0000000..141d5ba --- /dev/null +++ b/classes/views.py @@ -0,0 +1,14 @@ +from django.shortcuts import render +from rest_framework import generics +from .models import Classes +from .serializers import ClassesSerializer + +# Create your views here. +class ClassesListCreate(generics.ListCreateAPIView): + queryset = Classes.objects.all() + serializer_class = ClassesSerializer + +class ClassesRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): + queryset = Classes.objects.all() + serializer_class = ClassesSerializer + lookup_field = "MJC_Class_Name" \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 044b3d4eeed9fe10e9c40ca102d11e2118ea4ac9..7bde69376ed82a6990b084b44608bba26b2caa94 100644 GIT binary patch literal 229376 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 LWVq^Q9>Mbu*H6Ua diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..696b52b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +django +django-admin +djangorestframework +environs diff --git a/student/__pycache__/__init__.cpython-310.pyc b/student/__pycache__/__init__.cpython-310.pyc index 4247aaa6177048fc0897dc2c5f5c95e4b65012b0..8ec391f991b0ce5f2b0664330f65c903d279cfad 100644 GIT binary patch delta 53 zcmX@ixPp;8pO=@50SKO`r%mLxVf3EpAtxD7l%JKFTvDv>oRe5w93PyTSd^ThUtE+t 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)m}hPbRB}1@ho~yuA0m{NQKHja|2n)Pc@$_>{XX*w1%1w-{oEFeB_?KqrWq z49^h59LCm*;n~a@pthagt&=vCc25LSavA2U8?cwZZFk=5yzv1ZVKrvVkmoW}$#H29 z(v0y*s@^Qc6Q6OxQ=Wfc-85AE?{cE`PwiG5DgY=>%SS z@r)s@bYHk2OE>u-72j9`TeJ!Xl@}AC8Il28V1d=B`RlG$el(7I>Oh23Q)}|tO?Xts T2~RH%@f3uS#=(*-*pdGMq5x(y diff --git a/student/__pycache__/serializers.cpython-310.pyc b/student/__pycache__/serializers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7701355ae73ca086ab750e0e0cde6cdd706357e GIT binary patch literal 665 zcmZuvOHRWu5cMx<)CLMH5aI^iG#5Y>5=gA5kh(z1#!6%Nhtq)F2*DOk!j2muZ&~#U zte8oFRw^U;WjxNjnKyR1x7Q|MgXv`Q0pCyDY@2}1IV{%)P()Ef3Yt<%6jR)=f~TC4 zE24x7UWp1cU5FQ+1}YqpUTY0Gq(^s1Ct z*j#y0fdC&p%4JoI!E5Cvb56TqFZ7X=%dF5+`nHrssVakhEagL$ndZde5PblL+W2rX z*G9Q_V!IHn;cJ-8%0efm$}^W-mU&gcU|ezm3CXP<-`H}Ya|~cvIntTUXNj|U;+h#I zTl4MTKY4+@2SD#afQSehQ+o*RuqQ0ux9uRr2pHb9(s&0L!+dPqAw=Ye))ADvZ?#*= ri3Qn@rMULui(_{7x%JH1b literal 0 HcmV?d00001 diff --git a/student/__pycache__/urls.cpython-310.pyc b/student/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b7aa425def36a4711747a3c9a65291274af8cf7 GIT binary patch literal 429 zcmYjO!A=4(5N&stWd$}yE?)cr4$!+nVgiX5V~oU@>}6B711#xoN!x|MKll%N^zPU6 z>WN>_#MmwzoTM|IH|={ft%&0mvi5m1pa0nS<&ysv+T_+QHL;E%hB+#5f-zzq^SM{} ziH{Lr7J$DB-WuEWD)2&Zel>I#?#u!zNf$y*%J!(%9s%Rr{E7 zo+@22D77N{%hR^+s{Kp?)xdM5-R+VVusrM}*#WmU{Tj))1XHM55vdXZ_f6)hKH zP)V+&XJrhMfeRPYqrkmo8rPhrNmc4J%+;y(1X|{>f#;fT0!mAj(w?p>7on-1#WuHVJc?;p-Hf3*Mr literal 0 HcmV?d00001 diff --git a/student/__pycache__/views.cpython-310.pyc b/student/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ddef17d20db5fd36d2a5502373114d5693db4fb GIT binary patch literal 878 zcmZ`%y>8nu5T-2Il4U!!J9H?5?p~r7D1sCYkQOM6phkb7g^p0dv0pa5QLhM$5h=0Fio1 zqz!sA_|g0+(iVhiq&#}LaUbmc(v~BHtc3Bf?IJ1HSpibISjxhvN;B_Dd0l0?_F$7j zyUcCy2>+~oSVEVs63mD zjDqAdOfS*wBPS!iDJPI&zDO+QiLI4LZkDjMCz~CH6qA?bS0fR7k+-)!Ez2u9_>?SZ zTQx`;-yPrS{DJCO!VP@fD3a$KY>8&)qODw4#T0Nnj4`5k*k<7Ww3h}u%(@Ic2F?wS z2wYbib5(8RYzbN&1gTk{j|~X;y5+cBP{1Xzbv*34zFKALxjC^5gJoWo7P;N-2q`l; zL+abs;1&98Y*F(-+qzkuLqBZYp~0c;Z!X_`B0=}Ux#LG`{(poMc`R=iy{`YtDSuka OwRc6=%Hua~oeb53G$u|jZa dVo`F2f>UC0c4}UVesNKRB@b$*C{ zsjr^=3yNY@CbEkS{i-U}U9akO%+XQ8a2-5dt?moPzEf~_1sI&-c25w10dH8#bKZ(v zaQ2pg0Qr@H)V!8AGM5lsvNZgGXIUzI(pGC*^p)wHpS1>b<4Q{1U2_ahal01?n&li= zE`Wnri(KlU4grfoxD)8l$k+2af*H(r9HO1XQ!&Iyn)vwq9~)B7%cgKnJAb%bE}yBY ztNN;FDB=16bl2M%@>ycHA;Q=#b*Q?c)jlBnay%7TOg80S^d^-yqH8gN4_B3L-~#C* zHC|Q9CraV4L!;3@RO-`EG*pfv&>P($eOYN|QE%oC-s{$U)^Dhck6r~xy`OktFvY(3zxk%<v(PE_Gqc z>&)3Qo5aX&A1Xt=o+~>xrKYr+=KnulY_^tu5R%e8Mu?b@f(L(snc$-h$R<4a9sL?l oUZjDKp)R_$S-{n(z&Prdyd7xoJ;aJWdb!u~gcAv|-4l=GU-xFX9RL6T 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"), +] \ No newline at end of file diff --git a/student/views.py b/student/views.py index 91ea44a..830b172 100644 --- a/student/views.py +++ b/student/views.py @@ -1,3 +1,14 @@ from django.shortcuts import render +from rest_framework import generics +from .models import Student +from .serializers import StudentSerializer # Create your views here. +class StudentListCreate(generics.ListCreateAPIView): + queryset = Student.objects.all() + serializer_class = StudentSerializer + +class StudentRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): + queryset = Student.objects.all() + serializer_class = StudentSerializer + lookup_field = "w_number" \ No newline at end of file diff --git a/university/__init__.py b/university/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/university/__pycache__/__init__.cpython-310.pyc b/university/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..286320f32f0e51c53a53275aca550f8e31633992 GIT binary patch literal 171 zcmd1j<>g`kg1pqUG!Xq5L?8o3AjbiSi&=m~3PUi1CZpdylAm0fo0?ZrtnZwklByq`niNo!pOu;n639s`E{+dQO)N^z&@V1Z)-TP=EK4ma m&Mc|akB`sH%PfhH*DI*J#bJ}1pHiBWY6r5Xme)iW^Z0 zN`Ut1`wZ9z_Wv+Hz#?MBOHzm(s*!>QQ7h98I~o}a^QWPE1LwPO8;-782Vh_r!>oj6 z?CkJRWZ^{h_0Za7V~5doE0^G8NR3sXz2iunh$)R_jzSPJ2W{s^aG%5-$6iePd%3X& zq@J4E%NyHFag&$VC?ua@_2_JmOR=D9?_Wx&U9*wiHFEm5D1W^#U$-GUM+1|Fi}(&7 NKQt$2G-o+Ir9VZ{TxkFR literal 0 HcmV?d00001 diff --git a/university/__pycache__/apps.cpython-310.pyc b/university/__pycache__/apps.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dba8bcf2713e78437a550e68355ff2b1308f5ba GIT binary patch literal 458 zcmYjN%}N6?5KcB*S+^~S^eTAW%jN|{S}O`3icmz@OGr1_c1w1%ZZ<-_>O=SnzEZB9 zd<9QV+G0B}lll4P%gpHEFh(G?EQ(KfzkP5lAp~Pka|uQuffcH7hB3NFA`s*Q2_o@3 z$pR71QPTSX6iTo=oixo<*G0L^edbs&1Y=M$0wYm|1%hsz5fNmeAixs3v!}Xzm8~he z&5q^mLacec)Tvmcl@?N&^rl=+Y^U!^sf3H|f5R;4xrnivSCTOoGX{98ygy*<#d5W; zoC{fSt2)Mkg%w+x(AU0D>u<6(zYlb!D@m2jxuLf@x0S3rL#HqUeU^*IR8k07gmH?~2r#S%=p%6!So0}!X_4oUEY#aFRJ^C=n&g(!4@DM5>V3|#ZB@2X#fLLIi{~8*4gtUYbXHovCQWj&At} zy6hkD34DXMth(-w75C1hZ8i}IOFprW$M(JFT&L`GLWZq#I2!%182d$&<>ugI8@qmw zAerPD%X!Q>jjhbe?bzn*HIueYiC)?QdQv}6gE?I0Td*(>b30_h~ukVaK8Jyf8l^P{K{rN4h=Bf3ddP z>lk0u!3beOA#i(@DIB+jIH;10!W05%y9ox91YS*5CSi@{?Kj0-ja5ULt)j~J6o_&p zKpj+5P*S921?Y>}*hz|`4<%uEOi}lp@`sg(m=+2R_0|e}VJ`iVeMO<;koBXcI-2 zHc+QQ`PDgY;^27m>Yi&W)}TvUZW7!gAl2bE!2^Q31f+!VbyJTTwuoCP-F;l8SS~07 zlCBnx*p(09^vP; zst@S|n(g*{6UbRojLW{1Iyu#%}J#Uhc;}XK$GFr2m6SU-5o$?8YH_0vVzwJoi-4Q;}8lRL?zC zS!=WA!YQ85n%pdC1-&He9VyVKoP4gSeIE1~-Cvpb;CA*x*N4h7gdZmDa49EA94LjZ^Y+H57PEFSijKxcvy37#WCf{I>>PmyRf_KH8Wq#c|28@iIzs=FiA#q*?mqQ zHl0{~!E%Rr;aQEFiEBi5dcCc9Puv|9rSGv1J4au^>JXOjkQaCZSiV|i@3*cF%P$J2 zhowGdj>EK|WAlgTHs+phueWTbB49EJxM4RcNY>*SDgo>pe81Ofj>#G}l-!uf2)GVr l%;8nu5T-24`tiTxraws2tX`rQD2fCLP!uhKphj9ii=c>fB1bY4QcB>i?Sr&q zx4uE&gKMYE-a7S;c5FAW6AC<#-;vbE@9xO!b&o*v`C#z7OvoRcEH}W&9(4H&3?Zn|XnkRfDQQ-V$1&_BTRpW)5p# z&7cm5LtQ}J8PWj6qg6nvGo%Sfjn)CF1JZ(BZ9p2d2}pB>bO345HX!X8vOzn2(%ZNN z)}&{sieMwk1dN8KtRmt_mi`lI6ld zXG_kn6UJ#Iye5}ftBu72(zKobO_qk)PXzr?(a(+=Y;-bg$LFL2(TM|w47D~pC)tl<1`=(phXl~hqklv=z*gR@5| zZq2HDH9gQluB}he87qu_-YcQ=A%v04~r1$>uyH8NVx>j|?2$W21tyJJ{ mF@{?UDt2(RqWF~adirX;!B<$~iW;dIUHCd?r>s9~)A|Q8tZYI6 literal 0 HcmV?d00001 diff --git a/university/admin.py b/university/admin.py new file mode 100644 index 0000000..670af3a --- /dev/null +++ b/university/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import University, Agreement, Section + +# Register your models here. +admin.site.register(University) +admin.site.register(Agreement) +admin.site.register(Section) \ No newline at end of file diff --git a/university/apps.py b/university/apps.py new file mode 100644 index 0000000..5e2f1f4 --- /dev/null +++ b/university/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class UniversityConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'university' diff --git a/university/migrations/0001_initial.py b/university/migrations/0001_initial.py new file mode 100644 index 0000000..5885812 --- /dev/null +++ b/university/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 5.0.1 on 2024-06-10 02:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('classes', '0001_initial'), + ] + + 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', + 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( + name='University', + 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')), + ], + ), + ] diff --git a/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py b/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py new file mode 100644 index 0000000..018022e --- /dev/null +++ b/university/migrations/0002_rename_agreements_agreement_rename_sections_section.py @@ -0,0 +1,22 @@ +# 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 new file mode 100644 index 0000000..76f7a07 --- /dev/null +++ b/university/migrations/0003_section_number_of_required_courses.py @@ -0,0 +1,19 @@ +# 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/__init__.py b/university/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/university/migrations/__pycache__/0001_initial.cpython-310.pyc b/university/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfe8c7bfcc21409c01bf4c85498d1357f4f3eddb GIT binary patch literal 1026 zcmZ`&OK;Oa5Z+xoiS4)#`hq(MDVMlN91&_sDdNxysYOVZkhS$roK5`*yAC3`!nOZ^ zKfpiX#1Ggjr=GYY@fbU4lZvv|j%UXE&CGr?E>>1Ng6p&F_n$Wi`Cb{z%SK}lw|eKRS zqp^oue?tKzq=JM@Pz=Qq8rskpHU)--*3c0YpN43P)`i_?!a<)aT;W|%wAyHS!WS!* zl~`i+g4NiyTe0gmuy<KSU|yNjXs1UNT*qm(ZQR@eC^qtj(??H2V@#p^dkn zD1Z#|QkzD`hlMhZo>w{D9On}AYFSRYS5D)-zILh&%w#-%9b&q@gjl$bJHBzEy51-< zUKHVoj8j0}kD_;Do>nEH)w&|e7chccKpsobid9+Ky_%t;YPghDdHiQG*+=dUtD6|N zH{fcft{w4wa#~b!=J1LU%*XQ!QTGvCi=S_UL6Jd_j$^KagCZW+JOn+=5xjx3SE?8y z6*}lu-Hc9vt9TG-6$gu328+oLmV4bDO;q(uHF4|5C>&xlX4!x22BTYSm9A3u%l>UU v|F@hUb%bM_5myX(o)leiR+CZRzy7$m%uIWLnT+#f#_v;FC9kSjXFJwke=H>X literal 0 HcmV?d00001 diff --git a/university/migrations/__pycache__/0002_rename_agreements_agreement_rename_sections_section.cpython-310.pyc b/university/migrations/__pycache__/0002_rename_agreements_agreement_rename_sections_section.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15a662ad35790631349c27c78dbee97f36c4d696 GIT binary patch literal 646 zcmYjPy>1jS5cbdB-QIGkKopd8+r$SoLP0^IN`$x~$~Bg=Gr8<)cYWBmpwywE;6ZpL zw^Y0WNQkj-lgmgm{>I;U{$zV}R4|gu=K4Bt#(qWTv1H_&kouQofB|n=$Jd;*4-5pz zZww^zM%>A@fNaIe$#05dB@abcZ=BiHw)a)MdMp!iPDuTd46-!`M$b8jjaW;}nh8kA zVDdvGJcU`r#7!Zm67w)WyU$&UFsoYQJ^HX%E|;%#-PgO?v_up`Uw=X8>)ox36+`iE z;}ARScRtJ?Fh%CJ1>KttL*C=p5v{OF-G|wT&dXWIbz-#+h1Q*gp+&+Atv?T@jTxc` zxWyi@uWIy8#L7=TVIgd%#c?w~nR`lnGJn3S8{463hst>M-d02ERGrczb%9qO zoo%QkuTJBD3=6w;Bh%jQzS3^Sf*y_q*shldHH^Kw&`zc^#RUGn@0N>0hlYjVJVx2)qC z?}9Ag?1Di6;SUBO@+SNqW+8|xHjf?%%jSViy1LT&P^;e9Nv8l?Q@GOeGoj>^%q++u z%Q&zs0ABGdMA1Z!04L291Vr~7CNRAhREr@dqM4n2*)ce}v9C9%O+DP%cgyASjnvrZ z9m>4Yh#mHW*@wHD!NNBvw}GARf>-_6tx!u<682`SHG(YEs12G2l8Vi_odTBm*be7& zLBqNMr6aV$`>3q31$(sCXi#rZZqb+2cq~0qN}EVYe~v9ud?4k`n76)Z$^h5c1NKFY zMh8S`on9}~d4Key?%>M(7`A~)$LRg7MW^o;sV zzv1euRtt?r!+%k4&(Z(@ literal 0 HcmV?d00001 diff --git a/university/migrations/__pycache__/__init__.cpython-310.pyc b/university/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdea3f883cb4c5e9e0d8ddcbcb62c7c8e2d195b7 GIT binary patch literal 182 zcmYj~F$w}P6hyPKg$R2P8~+7F1g%BbLaahe{<@JQU-A=SkK~nXy@i!Yr33SZnP#Z# z7NRKNFw}fk{HrNtTg+{N5xrP8ho^{j{^4_mkvxLSS~2WNXOAHJd0<$iY4^vP~0sdyOht3Jg-(V3U-q`}CTxJ(=uqQ!jZ|(26gYA1<>1 literal 0 HcmV?d00001 diff --git a/university/models.py b/university/models.py new file mode 100644 index 0000000..ec38644 --- /dev/null +++ b/university/models.py @@ -0,0 +1,25 @@ +from django.db import models +from classes.models import Classes + +class Section(models.Model): + area_name = models.CharField(max_length=200) + number_of_required_courses = models.IntegerField() + classes = models.ManyToManyField(Classes) + + def __str__(self) -> str: + return self.area_name + +class Agreement(models.Model): + major = models.CharField(max_length=200) + sections = models.ManyToManyField(Section) + + def __str__(self) -> str: + return self.major + +# Create your models here. +class University(models.Model): + name = models.CharField(max_length=200) + agreements = models.ManyToManyField(Agreement) + + def __str__(self) -> str: + return self.name \ No newline at end of file diff --git a/university/serializers.py b/university/serializers.py new file mode 100644 index 0000000..11d6f58 --- /dev/null +++ b/university/serializers.py @@ -0,0 +1,38 @@ +from rest_framework import serializers +from .models import University, Agreement, Section + +class UniversitySerializer(serializers.ModelSerializer): + + agreements = serializers.SlugRelatedField( + many = True, + read_only = True, + slug_field="major" + ) + + class Meta: + model = University + fields = ["name", "agreements"] + +class AgreementsSerializer(serializers.ModelSerializer): + + sections = serializers.SlugRelatedField( + many = True, + read_only = True, + slug_field = "area_name" + ) + + class Meta: + model = Agreement + fields = ["major", "sections"] + +class SectionsSerializer(serializers.ModelSerializer): + + classes = serializers.SlugRelatedField( + many = True, + read_only = True, + slug_field = "MJC_Class_Name" + ) + + class Meta: + model = Section + fields = ["area_name", "number_of_required_courses", "classes"] \ No newline at end of file diff --git a/university/tests.py b/university/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/university/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/university/urls.py b/university/urls.py new file mode 100644 index 0000000..9db9898 --- /dev/null +++ b/university/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path("all_universities/", views.UniversityListCreate.as_view(), name="university-view-createlist"), + path("all_agreements/", views.AgreementsListCreate.as_view(), name="sections-view-createlist"), + path("all_sections/", views.SectionsListCreate.as_view(), name="sections-view-createlist"), + path("", views.UniversityRetrieveUpdateDestroy.as_view(), name="university-update"), + path("/", views.AgreementRetrieveUpdateDestroy.as_view(), name="agreement-update"), + path("//", views.SectionRetrieveUpdateDestroy.as_view(), name="section-update"), +] \ No newline at end of file diff --git a/university/views.py b/university/views.py new file mode 100644 index 0000000..58a2664 --- /dev/null +++ b/university/views.py @@ -0,0 +1,32 @@ +from django.shortcuts import render +from rest_framework import generics +from .models import University, Agreement, Section +from .serializers import UniversitySerializer, AgreementsSerializer, SectionsSerializer + +# Create your views here. +class UniversityListCreate(generics.ListCreateAPIView): + queryset = University.objects.all() + serializer_class = UniversitySerializer + +class AgreementsListCreate(generics.ListCreateAPIView): + queryset = Agreement.objects.all() + serializer_class = AgreementsSerializer + +class SectionsListCreate(generics.ListCreateAPIView): + queryset = Section.objects.all() + serializer_class = SectionsSerializer + +class UniversityRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): + queryset = University.objects.all() + serializer_class = UniversitySerializer + lookup_field = "name" + +class AgreementRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): + queryset = Agreement.objects.all() + serializer_class = AgreementsSerializer + lookup_field = "major" + +class SectionRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView): + queryset = Section.objects.all() + serializer_class = SectionsSerializer + lookup_field = "area_name" \ No newline at end of file