From 2f95ddc87872f1973bd2fd0bca204e2611bbd302 Mon Sep 17 00:00:00 2001 From: Ciprian Boziean <cb01752@surrey.ac.uk> Date: Tue, 6 Dec 2022 13:27:06 +0000 Subject: [PATCH] Added functionality so that a new vehicle that is being parked outputs all the information and stores it --- carpark/__pycache__/urls.cpython-39.pyc | Bin 981 -> 1022 bytes carpark/urls.py | 1 + db.sqlite3 | Bin 147456 -> 147456 bytes homeapp/templates/homeapp/home.html | 2 +- static/css/base.css | 24 ++++++- static/css/base.css.map | 2 +- static/css/base.scss | 31 +++++++- vehicleapp/__pycache__/forms.cpython-39.pyc | Bin 0 -> 1223 bytes vehicleapp/__pycache__/models.cpython-39.pyc | Bin 577 -> 573 bytes vehicleapp/__pycache__/urls.cpython-39.pyc | Bin 0 -> 533 bytes vehicleapp/__pycache__/views.cpython-39.pyc | Bin 0 -> 1878 bytes vehicleapp/forms.py | 37 ++++++++++ .../__pycache__/0001_initial.cpython-39.pyc | Bin 851 -> 851 bytes vehicleapp/models.py | 4 +- .../templates/vehicleapp/create_view.html | 14 ++++ .../templates/vehicleapp/detail_view.html | 17 +++++ vehicleapp/templates/vehicleapp/index.html | 38 ++++++++++ .../templates/vehicleapp/update_view.html | 11 +++ vehicleapp/urls.py | 15 ++++ vehicleapp/views.py | 67 +++++++++++++++++- 20 files changed, 255 insertions(+), 8 deletions(-) create mode 100644 vehicleapp/__pycache__/forms.cpython-39.pyc create mode 100644 vehicleapp/__pycache__/urls.cpython-39.pyc create mode 100644 vehicleapp/__pycache__/views.cpython-39.pyc create mode 100644 vehicleapp/forms.py create mode 100644 vehicleapp/templates/vehicleapp/create_view.html create mode 100644 vehicleapp/templates/vehicleapp/detail_view.html create mode 100644 vehicleapp/templates/vehicleapp/index.html create mode 100644 vehicleapp/templates/vehicleapp/update_view.html create mode 100644 vehicleapp/urls.py diff --git a/carpark/__pycache__/urls.cpython-39.pyc b/carpark/__pycache__/urls.cpython-39.pyc index 90c5111fed91bd3d42ddd5190e80ad48b5fa8e4e..1081066e4c8cc5d88274631e3401667a17d03a9d 100644 GIT binary patch delta 127 zcmcc0{*PTdk(ZZ?0SM;a?o0M#W?*;>;vfSyAjbiSi+v_)TZ^T#q_C&5rf@VfHZ!F& zM{%TZ1~X`KZ7i6>BwfW(mYR{7oRg|w#SdjA78K}}7UdLA=3(9~zymadg`bB}fSHF8 H2>${AddC}! delta 85 zcmeyzewAH2k(ZZ?0SLaG=u4JiW?*;>;vfT7AjbiSiybCvTXUr|MRBCC2Qz4LY^<5X WG})MWHy=nl3qKE|05cCG&p!Z|iVmj$ diff --git a/carpark/urls.py b/carpark/urls.py index cfb8bff..3a10bdb 100644 --- a/carpark/urls.py +++ b/carpark/urls.py @@ -18,5 +18,6 @@ from django.urls import path, include urlpatterns = [ path("admin/", admin.site.urls), + path("vehicle/", include("vehicleapp.urls")), path("", include("homeapp.urls")) ] diff --git a/db.sqlite3 b/db.sqlite3 index 6e5a52c852ab75b295326782dda911f827c3c0df..3bd28013ac4ca93c1abea959b922f3eb87adeec4 100644 GIT binary patch delta 707 zcmZ{iKWx)L6vppzQGM5nJh@f~R$4_FfTdCVr^a?y23XlxT6%D`O@vUTlcH`-)v;1l z#KsB(Ys7#mq^@B^lm!7Jf=);bNZoj6r==Y@pZuQe@7>SudmfF%Xe18Wbm`f`ZMrmG zf7O|{V2!{De1dl{ggtlxYvY}}aP8_G^XYJ-c>L(ehTPnIFipkou>W@0r~4n~t;U4F zXDoXT14yCPn2dMEjqOx$((H7*i;Ge#X;zl!TRM)zIE>;r4gxO-dVbLJ5<ggpZmoEp zi7Cd2bJBKQEY+F9Jze3lx&B|)w>WX!rYTc;yF|*16@G+(<;Z~iD&DMf(n64J%R=W` z%R&_@4bm_P&oF)@wbVBl3R^~~r7{ojmUu~;#FupoHBM~XM%_K5lKS%N>y#7Mak@=s z@U$2_RGHe!GliP4=X<!b+_bA_2_Y675%>bX;0XS}cQ}U08+-jV+~=%G4PMN#Hl5nT zE#^?{*%GWp%TDShD?gRZFdGYMg1MrCR;M2l_y~va8-BtBPT?D#{t{NNuns*Rm6&BN zt-R+ZtsJ#XS~*oxN-xeRGt3d#)H&i9-Xr7(d_~Y{iMZ2XUHb1QC>hmYxoOR$C83%^ M-M}iNFCx&izvZ2-Gynhq delta 62 zcmZo@;B08%oFL7pI8nx#QE_9!5_usu{xSysm;6`wck`F=ck|EUuh`g_z~5Y^zr9SK RvG2lWmV`g@iwXpQ2moq16;S{H diff --git a/homeapp/templates/homeapp/home.html b/homeapp/templates/homeapp/home.html index 24a2748..cf5aef5 100644 --- a/homeapp/templates/homeapp/home.html +++ b/homeapp/templates/homeapp/home.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block title %} - <title>Notes Home</title> + <title>Carpark Home</title> {% endblock title%} {% block content %} diff --git a/static/css/base.css b/static/css/base.css index da5abb8..016f2d4 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -10,7 +10,29 @@ h1 { .success { background-color: #00FF00; } -.error, .errorlist { +.error, +.errorlist { background-color: #FF0000; } +.menu { + font-weight: bold; + float: left; + color: white; + list-style-type: none; + margin: 0; + padding: 0; + width: 100%; + overflow: hidden; + background-color: #111; } + .menu li { + float: left; } + .menu a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; } + .menu a:hover { + background-color: #444; } + /*# sourceMappingURL=base.css.map */ \ No newline at end of file diff --git a/static/css/base.css.map b/static/css/base.css.map index daafed0..481bbeb 100644 --- a/static/css/base.css.map +++ b/static/css/base.css.map @@ -5,5 +5,5 @@ "base.scss" ], "names": [], - "mappings": "AAGA,AAAA,IAAI,CAAC;EACD,WAAW,EAJR,iBAAiB,EAAE,OAAO,EAAE,KAAK;EAKpC,gBAAgB,EAJZ,OAAO;EAKX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GAChB;;AAED,AAAA,EAAE,CAAC;EACC,cAAc,EAAE,SAAS,GAC5B;;AAED,AAAA,QAAQ,CAAC;EACL,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,MAAM,EAAE,UAAU,CAAC;EACf,gBAAgB,EAAE,OACtB,GAAC" + "mappings": "AAGA,AAAA,IAAI,CAAC;EACD,WAAW,EAJR,iBAAiB,EAAE,OAAO,EAAE,KAAK;EAKpC,gBAAgB,EAJZ,OAAO;EAKX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI,GAChB;;AAED,AAAA,EAAE,CAAC;EACC,cAAc,EAAE,SAAS,GAC5B;;AAED,AAAA,QAAQ,CAAC;EACL,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,MAAM;AACN,UAAU,CAAC;EACP,gBAAgB,EAAE,OACtB,GAAC;;AAED,AAAA,KAAK,CAAC;EACF,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK;EACZ,eAAe,EAAE,IAAI;EACrB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,MAAM;EAChB,gBAAgB,EAAE,IAAI,GAiBzB;EA1BD,AAWI,KAXC,CAWD,EAAE,CAAC;IACC,KAAK,EAAE,IAAI,GACd;EAbL,AAeI,KAfC,CAeD,CAAC,CAAC;IACE,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,IAAI,GACxB;EArBL,AAuBI,KAvBC,CAuBD,CAAC,CAAC,KAAK,CAAC;IACJ,gBAAgB,EAAE,IAAI,GACzB" } \ No newline at end of file diff --git a/static/css/base.scss b/static/css/base.scss index 8833086..147c699 100644 --- a/static/css/base.scss +++ b/static/css/base.scss @@ -16,6 +16,35 @@ h1 { background-color: #00FF00 } -.error, .errorlist { +.error, +.errorlist { background-color: #FF0000 +} + +.menu { + font-weight: bold; + float: left; + color: white; + list-style-type: none; + margin: 0; + padding: 0; + width: 100%; + overflow: hidden; + background-color: #111; + + li { + float: left; + } + + a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; + } + + a:hover { + background-color: #444; + } } \ No newline at end of file diff --git a/vehicleapp/__pycache__/forms.cpython-39.pyc b/vehicleapp/__pycache__/forms.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae4f1fd987bfdabc87c67b122b1b14ffe53dbd42 GIT binary patch literal 1223 zcmZ`(&2AGh5VpPlNh+!$A;E<n5K=A;AR#1FL6EAV9vV=g9QLwu)+X6@|FAcd<{GYu z7wCx_ujDJIUU&cwh#7AKQClo|>=}>8GxL4Bd~K~mV6f+3)B7$VKTug6U?W4A`T&F= zg65>4F{MN>;pD7vVuzBKM7YBHOoS)tk-KnW7c9OAz!HGP1B(ZiP()yfz~X}?5S=%q z-#v%8q)(0azEXugr>z#elhZ8CWs0Y(1J8#r^*RViVk$_?1dScRAev*M9p1>jvYs`@ z6|f!kT@xlr$qShzrjsN^C1yG9dr9(P#`EP#hIf+Yw3gqA>OycUe!UnRYN_-f&1#kL za$L<b$;-ix)W=O#57P02hff|q8l+s+TpbTSwrTUa9@u)e>Qm)GFl?h{AVO;OD|I<= zHbkdeAeMC<Lcb+cwoQZs)ww2mn-$CI8rUiX4@y)4tSUqifiO3cgqLO2@FuHDoh1JX zYIi;KTmymkY+fB|_5bH}2RxT~0hUxSz>+N(biU24djZ)l;CLkrzB9zP#w%eY5M=_P zzR}o|{!xIG67Crj-WPhI`<L|KuO2RljF3_pwf@lpBAxkhr=`_=eI=c(ecAB7Zz3fp zqggSQ%6QdD2}_h#Wy8~ERGBUUn3WSGknyp*d!-3*eFbES5YG3R%*FiXft+NzQMS38 zZM;4+UYc{QAxzFwIjwRb71EkFjneaIcb4ayBVggY_j+2D^5UMl4gHvV)9KTq81=iC za8yVe;{j!5ZhZT?R>&eCg8bB2np-+q>`ZWyiHU6Vb!ZzGdw`JZdmuvQGMJQ6_B(Vh zt)9zz%>AkEg5y<kS@U&IDEuUmkS)<2tB?Aj@x>7@CsmudZ>!O^w3XbWeJm2WW3OEo X--O%k$NLO_0vg%gqdm6aY&d@a3l|T# literal 0 HcmV?d00001 diff --git a/vehicleapp/__pycache__/models.cpython-39.pyc b/vehicleapp/__pycache__/models.cpython-39.pyc index ddebce1b220e342eb17f1c221db204443a473761..7904ffe301dc507e589f9a7023cab59d14198010 100644 GIT binary patch delta 147 zcmX@evX_N7k(ZZ?0SJCM^e0D5<jrIBn^<EnvVdzLLlk!^GnnQ{VGCx^WS@9lpV?27 zcd`Iurs^%ukj&gvx6IU>lqj|mAk#B1iXBAzmzJz#C=vh~SR^ocGGja=$K=n9Y8ns$ duqcQS1QNG6Y;yBcN^?@}7=gTECLqDX1OT0SB+vi= delta 151 zcmdnXa*%~Lk(ZZ?0SFSV^d%Qf<jrFYn^<Enlf{z4lET)@7{!&!3}<tvum>|}a!fq0 z&!x#�u2pr^z#!kug&$imfCwH`OyQiXBAzmzJz#DB=go7x7Q-XN+g$nf#tnO#>nT c76lOkK;jmMO>TZlX-=vgBam0j1SEKv0O$829smFU diff --git a/vehicleapp/__pycache__/urls.cpython-39.pyc b/vehicleapp/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e86f3b168d9d1ed2a8c46542589dca19186617d GIT binary patch literal 533 zcmZvYyG{Z@6ozNmU2Y2tuR+7Ai7`<^D6DOa%{FA%bA*9q*vu@Tl=jBw@RhdIiWji3 z@(c{o!ZVpa`EqXmjA*x;jN;|yE&bq(eOmY%4T2F}^GE^=c*d4I;haGQysWbH5|1<F z;G;M9A%N<uM^qyUpzf$aRE4Iakf;VNM{S}yM3$yO(tyrA>vi|Ei}iTv=c1VH$(Ds+ zBXMg=mb5oGlWB%ysQ{mBnG#FfH3m`@*Gj@L>9`6r1}uckN>AZ72~T|ly9hxR@o!6X zO0IJd1@5|l85a0o#W8c&YnCC*g_^GVYn>TgA)7j|;*%uJgS)XcorFgl4pNP@!NGCe z0chM|rvn;F&o59b^Uic=2V40b#SaFxiBp+tDb!@OlPFYti)K-*@;IHGonKvE#HrA^ k(2Ll;OXPWMZT9o$vOZX@V4dO6{;Y{eTD;{)6?eXV0QW1K0ssI2 literal 0 HcmV?d00001 diff --git a/vehicleapp/__pycache__/views.cpython-39.pyc b/vehicleapp/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d76f5beadb3ed28d5a41d515b5df36191a061e56 GIT binary patch literal 1878 zcmZuy&2HpG5bht3?aW^$AwjS!(12D#BcYuIE#j~X0ws&!GK(_1d+=rCxSPZidu+Np zVHr86AaRO#h2*%e<SVCr1x{3TJIM@-NA9lfa(7jIUsX-q>$M3y>YKlkKSM(P#>MKx zVDTNix`aUxK{Jxmh*FeU#&RC<+>5-t6}9Xh&-^@y0+2n?%EEjj+OV>pwewEY0XY!i zA0+CE4bg_VCpw}Fb6@mCALdQ5DF!eP#MYFIw%>wPGNN_&M`OwZsmo%a<%ri?N7BrS z!?{dgQnSa89@oB-3n5h<Dk)M03OE+#QtS9g>bKP06TFhgX_86MbsF)9LgfjnZypTU zgLe;J{V@zFIj4rq=@q*s6&3U;F}#BCD|*4fNj{0XXYSfrmTI%yZB}tvj#KdI^}}P6 zXCqGmz@!eG+q&j)mMJteVs)V8ucuO*I!KCzk+01gqWYlv=lk(XEtMW8X{pk9aab%< z8862BQlFTj94Cj5zWDm9FULu&%2=I@S1g~U@;Cjk{Jm~lA7;1?;7aYoK)A>IObtLv zFy5PogK!)B5Ec+SGsIAg`;t{mFo>Q(^t@s=dT#<)vhpMf8r#eJD^3V$;xx0i9SB^Z z35$e_ovSWv)O?W&)k77A?S@TMbXKm|h7IRF_4t6Q_h7w79p2r7*HU*3f}^ei^2)v- z7xWxlpEE&En0isMD}GJXKFr=Vp~SSV{0hc-AlNmBbtw1+o!;$l2oLuwAYQZphBm<9 zH%SmoYVYUg(-+I#S1uKX(=txva8JqDNKyA1P-d2l<%6FVXK|K_A!grjKQ{4`=D?yb z!=yRn{Q}xGJe_6*&yL!FFx3tWwVz9KT!=bM^~~O0dpbUo3JI?}u@JMS9O_{Da&Pb1 zbgB@ny7lbf;Q7HS9gd0j@#g>1vEspppx0=bP>=R$n}+Zk(2xySNYzKMzm{8Q>z15D zSghyPImf)3^YWe`6&LK1oqLss)Tjx}ElZJq6#zy49H_Ar0VPPrC7Y7UgY5JhT7o7! z!^s=S&QxG8NEh0~i$q5KhN73HKyIS`4L2^;MpR*<DGYxN{8Rh=8u)j~d`pA+01qQJ z7I<|JrTaKw@DAmcO?qbrlfLHA6s*B_@Ln<c8GNbHHNcy9`L<{AW?e-4Q`lWYd#w~c z2kl)ILlH3SWsu_h$^$(4yw#+<?^1r`O%!&%<>pN`@5@XAR%#b^N5NeY*S@ft|BH3x zYTJeR2^@SUICs_}`ULbE8ziv-4VZcW@?^9H9bg_Wjtb}>rc~Ih;LpMB=;K0}<kV>A z4>m5B(f#HFY^EwbbQR#|1=!QB3%9Vev@0I$g0`2~oV8F|<16mkDzN=1d<xf`X7XG7 U%dl*8=??AUkA<Bu2>apAzcl2io&W#< literal 0 HcmV?d00001 diff --git a/vehicleapp/forms.py b/vehicleapp/forms.py new file mode 100644 index 0000000..e653b83 --- /dev/null +++ b/vehicleapp/forms.py @@ -0,0 +1,37 @@ +from django import forms +from .models import Vehicle + +class DateInput(forms.DateInput): + input_type = 'date' + +class TimeInput(forms.TimeInput): + input_type: 'time' +# creating a form +class VehicleForm(forms.ModelForm): + + # create meta class + class Meta: + # specify model to be used + model = Vehicle + + fields = ['regNumber', 'owner', 'contactNo', 'parkingDate', 'timeIn', 'timeOut'] + widgets = { + 'regNumber': forms.TextInput(attrs={ + 'class': 'formfield', + 'placeholder': 'Registration Number', + }), + 'owner': forms.TextInput(attrs={ + 'class': 'formfield', + 'placeholder': 'Full Name', + }), + 'contactNo': forms.TextInput(attrs={ + 'class': 'formfield', + 'placeholder': 'Phone Number', + }), + + 'parkingDate': DateInput(), + + 'timeIn': TimeInput(attrs={'placeholder' : 'hh:mm'}), + + 'timeOut': TimeInput(), + } \ No newline at end of file diff --git a/vehicleapp/migrations/__pycache__/0001_initial.cpython-39.pyc b/vehicleapp/migrations/__pycache__/0001_initial.cpython-39.pyc index c3b3ee7e06f4f43b0cce57b36cb6cdc6a308a4bf..def7eaa06b01fac686a83ef982e934ffb10df68d 100644 GIT binary patch delta 20 acmcc2cA1Skk(ZZ?0SIL6`!{lXFarQE`~)=s delta 20 acmcc2cA1Skk(ZZ?0SM}^^ljw!U<Lp;BLyn} diff --git a/vehicleapp/models.py b/vehicleapp/models.py index b7423d2..8bc2986 100644 --- a/vehicleapp/models.py +++ b/vehicleapp/models.py @@ -5,5 +5,5 @@ class Vehicle(models.Model): owner = models.CharField(max_length = 50, unique=True) contactNo = models.CharField(max_length = 11, unique=True) parkingDate = models.DateField() - timeIn = models.CharField(max_length=50) - timeOut = models.CharField(max_length=50) \ No newline at end of file + timeIn = models.TimeField() + timeOut = models.TimeField() \ No newline at end of file diff --git a/vehicleapp/templates/vehicleapp/create_view.html b/vehicleapp/templates/vehicleapp/create_view.html new file mode 100644 index 0000000..bf4ac2b --- /dev/null +++ b/vehicleapp/templates/vehicleapp/create_view.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} +<form method="POST" enctype="multipart/form-data"> + + <!-- Security token --> + {% csrf_token %} + + <!-- Using the formset --> + {{ form.as_p }} + + <input type="submit" value="Create"> +</form> +{% endblock content %} \ No newline at end of file diff --git a/vehicleapp/templates/vehicleapp/detail_view.html b/vehicleapp/templates/vehicleapp/detail_view.html new file mode 100644 index 0000000..bdbf40b --- /dev/null +++ b/vehicleapp/templates/vehicleapp/detail_view.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% block content %} + +<body> + <h2>{{ vehicle.regNumber }}</h2> + <hr> + <p> {{ vehicle.owner }}</p> + <hr> + <hr> + <p> {{ vehicle.contactNo }}</p> + <hr> + <p> Created:{{ vehicle.created_at }}</p> + <p> Last Updated: {{ vehicle.updated_at }}</p> + <input type="button" onclick="location.href='{% url 'vehicle_update' vehicle.id %}';" value="Edit" /> + <input type="button" onclick="location.href='{% url 'vehicle_delete' vehicle.id %}';" value="Delete" /> +</body> +{% endblock content %} \ No newline at end of file diff --git a/vehicleapp/templates/vehicleapp/index.html b/vehicleapp/templates/vehicleapp/index.html new file mode 100644 index 0000000..07b17b1 --- /dev/null +++ b/vehicleapp/templates/vehicleapp/index.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} +{% block content %} +<table> + <tr> + <th>Registration Number</th> + <th>Owner</th> + <th>Contact Number</th> + <th>Parking Date</th> + <th>Time In</th> + <th>Time Out</th> + </tr> + {% for vehicle in vehicle_list %} + <tr> + <td> + <a href="{% url 'vehicles_detail' vehicle.id %}"> + {{ vehicle.regNumber | truncatechars:20}}</a> + </td> + <td> + {{ vehicle.owner | truncatechars:25}} + </td> + <td> + {{ vehicle.contactNo | truncatechars:25}} + </td> + <td> + {{ vehicle.parkingDate | truncatechars:25}} + </td> + <td> + {{ vehicle.timeIn | truncatechars:25}} + </td> + <td> + {{ vehicle.timeOut | truncatechars:25}} + </td> + </tr> + {% endfor %} +</table> +<hr /> +<input type="button" onclick="location.href='{%url 'vehicle_new'%}';" value="New" /> +{% endblock content %} \ No newline at end of file diff --git a/vehicleapp/templates/vehicleapp/update_view.html b/vehicleapp/templates/vehicleapp/update_view.html new file mode 100644 index 0000000..f54b451 --- /dev/null +++ b/vehicleapp/templates/vehicleapp/update_view.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} +{% block content %} + +<form method="POST" enctype="multipart/form-data"> + <!-- Security token --> + {% csrf_token %} + <!-- Using the formset --> + {{ form.as_p }} + <input type="submit" value="Update"> +</form> +{% endblock content %} \ No newline at end of file diff --git a/vehicleapp/urls.py b/vehicleapp/urls.py new file mode 100644 index 0000000..ab32cd7 --- /dev/null +++ b/vehicleapp/urls.py @@ -0,0 +1,15 @@ +from django.urls import path +from . import views + +urlpatterns = [ + #vehicles/ + path('', views.index_view, name='vehicle_index'), + #vehicles/id + path('<int:nid>', views.detail_view, name='vehicles_detail'), + #vehicles/new + path('new', views.create_view, name='vehicle_new'), + #vehicles/edit/id + path('edit/<int:nid>', views.update_view, name='vehicle_update'), + #vehicles/delete/id + path('delete/<int:nid>', views.delete_view, name='vehicle_delete'), +] diff --git a/vehicleapp/views.py b/vehicleapp/views.py index 91ea44a..7d683c6 100644 --- a/vehicleapp/views.py +++ b/vehicleapp/views.py @@ -1,3 +1,66 @@ -from django.shortcuts import render +from django.http import HttpResponse +from django.shortcuts import (get_object_or_404, render, redirect) +from django.contrib import messages +from .models import Vehicle +from .forms import VehicleForm -# Create your views here. +def index_view(request): + # dictionary for initial data with + # field names as keys + context ={} + + # add the dictionary during initialization + context["vehicle_list"] = Vehicle.objects.all() + + return render(request, "vehicleapp/index.html", context) + +# pass id attribute from urls +def detail_view(request, nid): + context ={} + + # add the dictionary during initialization + context["vehicle"] = get_object_or_404(Vehicle, pk=nid) + return render(request, "vehicleapp/detail_view.html",context) + +def create_view(request): + context ={} + form = VehicleForm(request.POST or None) + if(request.method == 'POST'): + if form.is_valid(): + form.save() + messages.add_message(request, messages.SUCCESS, 'Vehicle Space Created') + return redirect('vehicle_index') + else: + messages.add_message(request, messages.ERROR, 'Invalid Form Data; Space not created') + + context['form']= form + return render(request, "vehicleapp/create_view.html", context) + +def update_view(request, nid): + context ={} + + # fetch the object related to passed id + obj = get_object_or_404(Vehicle, id = nid) + + # pass the object as instance in form + form = VehicleForm(request.POST or None, instance = obj) + + # save the data from the form and + # redirect to detail_view + if form.is_valid(): + form.save() + messages.add_message(request, messages.SUCCESS, 'VehicleUpdated') + + return redirect('vehicle_detail', nid=nid) + # add form dictionary to context + context["form"] = form + return render(request, "vehicleapp/update_view.html", context) + +def delete_view(request, nid): + # fetch the object related to passed id + obj = get_object_or_404(Vehicle, id = nid) + # delete object + obj.delete() + messages.add_message(request, messages.SUCCESS, 'Vehicle Deleted') + # after deleting redirect to index view + return redirect('vehicle_index') \ No newline at end of file -- GitLab