From 637d109a913c6c5d0d5050086dd4386fd6c697d1 Mon Sep 17 00:00:00 2001 From: Emanuele Date: Mon, 28 Oct 2024 11:18:20 +0100 Subject: [PATCH] Templates and Admin personalization --- .vscode/launch.json | 18 +++++++++++++ techdb/flightslot/admin.py | 36 ++++++++++++++++++++++---- techdb/flightslot/models.py | 12 ++++++--- techdb/static/cantorair.jpg | Bin 0 -> 14254 bytes techdb/techdb/settings.py | 7 +++-- techdb/techdb/urls.py | 4 +++ techdb/templates/admin/base_site.html | 22 ++++++++++++++++ 7 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 techdb/static/cantorair.jpg create mode 100644 techdb/templates/admin/base_site.html diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..ff19b07 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Django", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/techdb/manage.py", + "args": ["runserver"], + "console": "integratedTerminal", + "django": true, + "justMyCode": false + } + ] +} \ No newline at end of file diff --git a/techdb/flightslot/admin.py b/techdb/flightslot/admin.py index a328fab..413d45f 100644 --- a/techdb/flightslot/admin.py +++ b/techdb/flightslot/admin.py @@ -1,29 +1,55 @@ from django.contrib import admin import nested_admin +from django import forms from .models import * +class TrainingForm(forms.ModelForm): + model=Training + + def get_form(self, request, obj=None, **kwargs): + form = super().get_form(request, obj, **kwargs) + form.base_fields['mission'].widget.can_add_related = False + form.base_fields['mission'].widget.can_delete_related = False + form.base_fields['mission'].widget.can_change_related = False + print("pluto") + return form + # Register your models here. class HourBuildingLegInline(nested_admin.NestedTabularInline): model = HourBuildingLeg - extra = 1 + extra = 0 fk_name = 'hb' class HourBuildingInLine(nested_admin.NestedTabularInline): model = HourBuilding - extra = 1 + extra = 0 inlines = [HourBuildingLegInline] fk_name = 'weekpref' + verbose_name_plural = "Hour Building" + max_num = 7 class TrainingInLIne(nested_admin.NestedTabularInline): model = Training - extra = 0 + form = TrainingForm + extra = 1 fk_name = 'weekpref' + verbose_name_plural = "Training Missions" + max_num = 7 + + def get_formset(self, request, obj=None, **kwargs): + formset = super(TrainingInLIne, self).get_formset(request, obj=None, **kwargs) + return formset class WeekPreferenceAdmin(nested_admin.NestedModelAdmin): - list_display = ('week', 'student') - list_filter = ['week', 'student'] inlines = [TrainingInLIne, HourBuildingInLine] + def get_form(self, request, obj=None, **kwargs): + form: forms.Form = super().get_form(request, obj, **kwargs) + form.base_fields['student'].widget.can_add_related = False + form.base_fields['student'].widget.can_delete_related = False + form.base_fields['student'].widget.can_change_related = False + return form + class StudentAdmin(admin.ModelAdmin): list_display = ("surname", "name", "course", "email","active") list_filter = ["course", "active"] diff --git a/techdb/flightslot/models.py b/techdb/flightslot/models.py index bba807d..52aa45c 100644 --- a/techdb/flightslot/models.py +++ b/techdb/flightslot/models.py @@ -75,14 +75,16 @@ class WeekPreference(models.Model): null=False, db_index=True, default=ExtractWeek(Now()) + 1, - auto_created=True + auto_created=True, + verbose_name="Week Number" ) student = models.ForeignKey( Student, null=False, db_index=True, - on_delete=models.DO_NOTHING + on_delete=models.DO_NOTHING, + verbose_name="Student Selection" ) def __str__(self): @@ -105,12 +107,14 @@ class MissionProfile(models.Model): mtype = models.CharField( null=False, default=MissionType.PPL, - choices=MissionType + choices=MissionType, + verbose_name="Mission Type" ) mnum = models.PositiveSmallIntegerField( null=True, - default=0 + default=0, + verbose_name="Mission Number" ) duration = models.DurationField( diff --git a/techdb/static/cantorair.jpg b/techdb/static/cantorair.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b150ed736d33e251b2555b2007c827c03effefef GIT binary patch literal 14254 zcmbul2|QHq`#(HFcCr^S6(U4s%{Hl!e3+1ZnMw#r$QEWk2u1iH6lJm{>txS5*%Pvp zeT*&pjP)=xXP(pd_xpdJ=l}gbuV+0o_slum_niB>?rV9!ulvw{(Fw2^6hwzt7DWWd6I) zF{saF81xC_gPJYW{v7w9295r&?>qP1o;*`9(Yt%bUr9kl;qoOIeG+y9c8r1H&-=d* zMrOu8$8jbmMrM}dEG&N-D;ozJD=RxI3ky3JJ39v_bg-~-^Kfx;|2hBjBY%ef83nyL zSy@>B^!R^w(7(ZWSz&Krn~V(SV8?hF73z`j(B$Xcc zgtM^=374ml~vU>Uu)}HTHD$?I=^@Q7#tcN z86EpIJ~2m}UszmP{=KqF-rm{W+dlvfkN(KT0Au_wvHmUDf5^oP$#o1`116R~axokW zfEpt&6Z6^2$N6+kS?+uDpSu#qDsVk9tE`z#LdlFI_`qj?T}V=SPKx|Tw0}wV|4gv( z|4)+rTd@CKt_c_?BLlQ}jJz-ej7H6lk%9eRw{6s<^!@}8Okt%;d?iP>U37j%(Qzs- zf5E0$<@WdYs2Tb2jUmZ@3b}3G_*$5}&zEAAtNtrDyEd@L6D?B z`{$1jlaMfmpT;5l6e~Kc`5TrK6b!_JC$KN-bjrw+M8USGnVHsB_d#nmO#S`~D#S@yWx{3nJDR%&2iqe#N@Wu1}*bO*e3-^uFf4gvArgXu=&}NC> zZ;0&CVR3Yr7#-%y1DwIM+F@9!Y9!ChDl!rkd9G~WamI$oXkpLOq*?p9+*|L!Rfe6* z=hVqxab*UKxB2fbHRd4~k$T_-wEtx7@^HI}>2gB7_*TGgeBY*)@4VRTMlE@MZeuG> zM=8XPgjtUyRbPI0t}>%*IK0~b1+S*Pa_%v$9BNE6N{ zljVrE%}>vbG)V+btUP|Ut-F}2bvYIh{5aWI?gCNr%-HYFZx}$54r@mOGFxq;@K|iM zOATgUN(UWHn(45tsu?0aV6_=RZZg1JRL;A!941AXr5t$@;L#JpEqGSzKuoKKPR7Sa z&+V^^8gc22U)h#G}rp_-Slv%6oiWiQvu*a@i?UT^Kb}@T_6aYZv9$ z*Nghq2Xci0cBD)W2Xo?PSrA#y{*Ku0q-!WbKeBF~{pQZS16MtXV!tCLQU(DNfo2SJ zdxl{GtXgOI2ZwofJ*AN`KUF2_S%;r^`6h*W6l6EZTWU0&ohipntqqD49Rjz5sj;R^Pw2<->GOCEh)ZF;%PIC&6dA;<{#qR!rU*#yI_sgIf#2yclDG8VI%n3Z(fq*VM|U{0 zmaDRNdGF`rp+Y3}AGa$05fSj-Ii48On9D2Ys&XWn<6()G81$^-(pjB2>eyCEpIMr* zNIf+WWs&&ipC1NiA|f20NU+(ysCDm{P2LSwDvv++!6HyI^-*>M9k!oM%cIIs&QLkX zENzM+sL zlaN$?EWsXBAm7D$jwq_x{kA=Qg}H9D^xDt%wQ7~`S8nODvJxs}YdY{>W~uzBj@g=; z_Ij@g^Zn|$D!K078gYJ-Sc_oUV2N*?gcjF_&sR>}dz^|;ZhsduilOqy?puh``@I_F>SiJ^)!>wRt6PTsYU22br`EWtlRsWJ6-12|S0-;PVACvv zN^fWH?^TA62kc<7)#)%mHjOIih#B`X9YS+cPY-s!Zqf$6N|k2hOhwCa*=2Rs4Pg&Zk0fLXxw+W*o7q2&^Y z067jxo%<)r%m*(*5H55WpU#VsJ+y6W@TUzF#G|$M4yuBACGIQFRf5V6|r0JMmj7pVSg0fw+X2aV{rHXZkQ=p zOr&&fVHV(%))+)R$VL-0Mg3Hy-pr?%WBP+zFaT25;D5gQANTnO<9VM7Zb2UB=ZK-0 zpu1<-XkXAL+#OlS`>|dnkDezj92a$|cymlBP;%{bL2{IM?&)w{Dl;AS@(ms4?sdcy zh@`{Ve#;Fsv0<8r5h7Y=ORj5q&%v31Zo?_9#mX25g#-Bdj}l2I@=KZ?e05U;i|26g ze-4JxN}|&0?_Tw;)NMQ6E&$K49EG2#pcd*5`>`4|SNxB@5>@aqRUqXBAGo zx;U)Fqak&#@K%bhzMt1UJTwLk4nhWgJ2s7MwT_$jNQj}sI39Xc_Yp37wzp-PhqQmR zkWEUuI{V~7N|R~12_2>%qC(4p5+4>&#H`ns2I?TM82)9X0!D}Mae1^3#Y@!xP5rjv za_DUQ{l;VOoh$ISP0Zj3oF7k!pu_lgq2-?yPrE}7_~xKbXrALaJ<+oL;k^99&9$yy zIjJ?04fpurZ!>hqElW(*?G9pz5w=FX3Q1d@2l|db-(QrYG)mSaByaCcx`ZlHxG~MX zAU`-Vkq%h3yLi38@Lya|9di^XOJ?5mG2uRS=IhhK-b}4pCLh-`XFEKWP_Jsnup|^5 zxNr`TFs}XTHJ(p!`1N&E!E-^5=api4cck;$QcB?bJ+!r%n?S@F!Trt+DaZ*AXqgzo z=O*?cEz^?UM+Pr3m7b#xYVDcudTTGK=xicU>(xI#$G(f*U51J5di~nkze3_!zd-VV zGg7q%7l(FJz6N){DwWzP#ciI34H=(5zBEzT06X>>29xWvE>;m8$r37joIGMskHkoY z#@Faq8C@?j(VTulIq&Z%OID0VAEREtkKoe#u95O1c57CAHn+3+q2*|HY~9w)n2& z6!UXw>gh0Yh4lc&Ie~?GmehKgtk?lLux^e4U(;yjgml~ohSSucu1C=$4qqaIZsO!%iNQVmoVV;ntGeK=3R zX1!CTc6dI2(3T@2fLF-McC}N^GI_#%V6f|_ zhf&9q`LG+tbeQfI8yz;M%?$sKYp?&|>8`Y@=p724fE^eSq!Q_{w%eF0H5yBUG#&P0 zR{--LmqqGLWXkLz%l|Q^G$Tm5vw$r8C4!KRVADc5&98k>MZyCScMRT4*p*ZUsPf}B z?a$2nbe;b3i@>9(RTaA7s36CqA?P5Rku#8Et8%aKhKqoyo^N{OpZFRAht#qUx#a6r z_!r!IiDwRAvR8~g6LKrbQ`5LMu1q1#JqGVyXF|Lt8LzB$VsP{HC%G+lFoX^xtRO|F zJs{=WDd8|k(x-@r5!P--$y2iyzt$$suIgS3{l}^#>An+6_++0mZW=OaLQj##UD5ch z8#^w+uN3lwoc)swPgc~6^|WmpYIosGApm?L!CQ~9A;R^w8|?O{yQX~+WkfM?!oe5)Pt zD^r7neHkKAB(NhiX7wd$(2)PrF8A?8XoQdU8if^?0xe?&yu2?8@6H2Au~b!FWUXi^z43Mx^H2YC429r(c953r;}H&o2=DR zN5G$mN&_g4J0o5n@g#%@78vFM5v>Qu0wtLaeH9I&ESS7v^nR3Q79vOSpK%d0NaBMf#wZ(nZ1MW&f&G@8%N6dSjgu zO_H*_?gmYB1CXN_PaDk9VM2~Zr07m^*S<#yf7{l6UkqRE<2TLtzuiDR zwF(EvW=VhH!?86|MKx_aOm1W89lePj{x%gOXTP<8pq5hPdXkqeZQ?MY)U325HXh$o zb6A2U^trC?UGUId8Q<7mO-R5Ha=m!k5
_XIeRx%)j^Nco|DR+GO2DUZ+5S$ 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 + + + + + + +{% if user.is_anonymous %} + {% include "admin/color_theme_toggle.html" %} +{% endif %} + +{% endblock %} + +{% block nav-global %}{% endblock %}