From 7c076b687a6262e4fa71c2a175a0b3adcc0120d4 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 24 Jan 2026 08:44:46 +0000 Subject: [PATCH] adding contact form --- core/__pycache__/admin.cpython-311.pyc | Bin 13973 -> 14459 bytes core/__pycache__/forms.cpython-311.pyc | Bin 17904 -> 18971 bytes core/__pycache__/models.cpython-311.pyc | Bin 34424 -> 35733 bytes core/__pycache__/urls.cpython-311.pyc | Bin 3350 -> 3432 bytes core/__pycache__/views.cpython-311.pyc | Bin 40755 -> 42166 bytes core/admin.py | 12 ++- core/forms.py | 15 ++- core/migrations/0023_contactmessage.py | 30 ++++++ .../0023_contactmessage.cpython-311.pyc | Bin 0 -> 1611 bytes core/models.py | 18 +++- core/templates/base.html | 7 +- core/templates/core/contact.html | 101 ++++++++++++++++++ core/urls.py | 1 + core/views.py | 30 +++++- 14 files changed, 204 insertions(+), 10 deletions(-) create mode 100644 core/migrations/0023_contactmessage.py create mode 100644 core/migrations/__pycache__/0023_contactmessage.cpython-311.pyc create mode 100644 core/templates/core/contact.html diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index 1b97a8240b6d371eb5bc0bd5cddf670307c42b7d..f65d7c4b392f8387b3d5be7e8e681f4e34628cfa 100644 GIT binary patch delta 2825 zcmc&$U2GIp6yCeLv%4*AX-nJPwy;06+cNF8TWLT*qXiAr;1&@CteVNNGnB>s^Ujpg zs8-CI2dFOtz4@}hce;8FmpH^ zI@=dHdL_!1!wqND+hP;Y!%9qRk$JAfK*;G~5tu2>y=_H}HfPDEy~rFWGM%XZ#Vx5^ zlrD9Z^gD`7_7>AwWX|1UVnwFbU9##bGFpl0>b4nLIX!yt40AZ%!oU4E9h)3l^pHbq z!$sTcjcaAw9CAB+=-$sNp-VEVt*ZNSSyN4#3EeQ%Ast?m_Ol@PJqJC_=!Q4LOP;7F zY7c9=*B$d#2AAT@@+Nb`S(A^-jLSHmVw~uKDGywX*TKEsW%aFOBrMx#v_b$p z-Cloh;Y!ss^AC{q;@n79=ZZ3H=$!U~C*ZwmKigV3U){(28_9ALg5g9cg|!{RwU4rB zVXSsPV}pg8OX7?@4v~8Q8nLHRIya(ou@fRf+0Dt1CGAP+X^lTlW0!uwG~B``d4+ua zuWmXp_^Y!49%@|YoniyBlWTCUAyE4S3T_MF5%{qof!ngipZD!Sq0oHS@Aogz+=0@u zR=C~}fZzOaG-(Uu=1g7=G%a+#6V3;=pk`wu?=3k;FV+%`r}pDkrBg{gYv{^uHTfi8 z@WNeiws8QhE1P1AwxAi`Mz9s`ZwdzzG<=ABNy%I~$1V4$u5vyA&on*V`xptg6ATeN zLXaY$CGaN+b`oR=b|J{sl(FL?8z?WV#avglTsA$bh>bREZpdg^kO0c@C129nF?yA(lFv+lDa22ur(RmkJKSG)&avD~4UA9A-#uRxV_71X^l;aw zYvHP=d3?~LNrPU^gIB26T5|inxn9epva)1(jp5zzLCAE zX{hlMjKA+_wb+4m=e^8N$~z1r^k0VZy@o%Vb6bkec|_&FSxc>IGoiJ^@oB- lsxGq73=7?GN-T22u@Fu~XPP>0lHeDDn=Xelyii}9+uzfPrmg@0 delta 2679 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 delta 3037 zcmbtWTWnNC7(TPzJ>8{y>vgx#hAjnQDJ^Yj3ziC{r5BU7DFM+`bUp4K=<3bP*8y(1gump3e*NgHa=)j8Xxc$FAu(WUNlA?nwW^;MM#X!H>Vf60bks7zy9Z& zfBy5&Ki~YbqsPguL&SU0<5?i_&uFg^k5?S^2Fbyr%h&f3DJI42nmgg?^9tLc`4av< zzp!O3H<8zuM9xi%EOphxTFN<-M0Feg9|~F1L);#&VSjo{ncdS$%2=o8k>X}f(lCd+?(S65 z=-2j!dNn0UE7+K4nVgT&0``@sR$d3QoDpw6SWsziC z`giY7gp{Rk_z96~F{_4so4c+RYo+agM**DxY`f{(u4wU?V#HI)HcC^Jc5{}mVJkck zV0IO(GjEhf{w=SSI5)tFP=&27SkPs|M`P^gz*6@XZkl$Q(p0*E`GN~aM6#`5-7P6jE6H|9 zg!T$biAL1{BVwprph8EMRN4?Q0(cgn!q*dtL^Va%qpGGwBICqLmGGfvE6qH(02o8Xq|Oc?_a$Tw5*I{b7tSu$w7TxafzC(^9+pp7)JlF&C>g+Q0U3-6~QEj!ne zI&PyFGwsIS0ktRW$xH*ALmL1>*di-bohDdgS#=@KROZPWPLGtGCeufcbyXI#WO#&q zQtoNn$GyiL6k?&G=wfLiFzPXGw?wiHo`WTlplNASF1RlWb z-5m6LwrmLG5Ies#VI?;ts+3&jvMoVDrm(o#deGD!-71zNpU9WD+vE8hn}!IGcy@u^UG*Dx2Z#hLRE!gbE&B6Yp~t`+^@3aWV(HYE2Fgg z%a6i;6mSf{IOv&0%Uu}>p=k6tAhR+jK%QVnR=!|W=0w_E(Lls<>3r4PwO3bF*UVN) zH`D=o7PHTB=n3a!E*z&LW8v0H4`bjG;K9qi%syXrU|LA&uF8{yyw7e{HI2*(NXT=p zjX_GLbN8T1_v)%)^-gHaboHy+06+LcMtHgt&57(IByqn^1SJjoTjH^Hexp@IBJpJ0 zh(r!c?9A#<|D%`_h&RDrs-7<9MEXwkpuHLrn=6&o2W(a!2;xPa$JO|*eq;6als1@9 zX+9gPFRn%LXS&752mn|54&YtD1rGcQm>astrs_*&ONz|hP~!OzZdc)E=a*@HLudpc zOlNB-;LY3wLcY)s#ec+!$Is#2P~m) zuF_o+b>aCfKn~zEU<~j!2h+8g_a!TYI1Xn(x;LxQctX)EUWn%d%(w!`I4jq{T}!WD z`*M~go@?xj#_vbMpf>?304)IPY{L?Lv65T79_1iJrO}oi)STn+g1W4wwZh8CVCw+& z01se(Yq7TFbqw?a#D3ulq@r*SJaAv9Z#G{hjiOJWm-cYYWV}tZ*o;+viO7KWn9^Rr zerc(3ix8l=nAp|!7Ivq7k?e(EH(S`TnD|&@M@aF5z#VGZam1(&(IV8NpGNpsFJqG(CC$(LApNhu^pei0n$1-Ag=y89P= C(uEHI diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 4bdc403cf2cacb3f72566aee4fde7a324bc60eec..77440cdf12fc45bdfcc238fc28417de3f3f7991d 100644 GIT binary patch delta 855 zcmey-!!&g|6W?-PUM>b8SkPLM`8;4Ep9EvXMs-7GE+z(dh7_F^h7{e2AEeo}QaFPd zH1#&eF>k45Or9tx%H+g2`Jac>WC0f4$p!(klh<1CPfiICkz`%Q$iT1~h#??_Z4L7> zCZGt@mrZl6&}q7*Bg9t z9cfqipvt~}s4(1DdHW&G9uJGA3xMNCRb8V5us}+~_xvPlC~Cqq-q8TMB0|gQm{r7UnIrOqyDo8Qbg_ lC%d#ua&Kp3U;rY9;@`}hGul5f3oxiN`ZIn2lSPU^2>=ar75D%E diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 354b74543e2d3fdb839dfb0c5c5ad268598509d4..e4f0366fda09c5fd906cbd8eceb10482e46ae967 100644 GIT binary patch delta 189 zcmbOx^+HO0IWI340|>O0WJYr`Fgylxpo9{X{@k@uJ&|SN16ED@ROT!dn35ESHEhe6 z85mXrF$AQ`MX9DZ1~X_nZJxw3ok@rzIX|x?F}Xzl7CV%+S%ZBVBcs~n{T$Dkic}{r z<_zF60P1A~;$rp9e>p{&1UsZAgieWFA$ftt_#%t(6&B;kyga}7ZRPoy8n{8QNDrtO E0OrgrYybcN delta 115 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 bO}%SKJx>3{vY&UD7CLhT>wUvaAdmky3}0^q delta 7188 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 literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index d8c35ff..4d7d3f5 100644 --- a/core/models.py +++ b/core/models.py @@ -474,4 +474,20 @@ class Transaction(models.Model): super().save(*args, **kwargs) def __str__(self): - return f"{self.receipt_number} - {self.user.username} ({self.amount})" \ No newline at end of file + return f"{self.receipt_number} - {self.user.username} ({self.amount})" + +class ContactMessage(models.Model): + name = models.CharField(_('Name'), max_length=100) + email = models.EmailField(_('Email')) + subject = models.CharField(_('Subject'), max_length=200) + message = models.TextField(_('Message')) + created_at = models.DateTimeField(auto_now_add=True) + is_read = models.BooleanField(default=False) + + class Meta: + verbose_name = _('Contact Message') + verbose_name_plural = _('Contact Messages') + ordering = ['-created_at'] + + def __str__(self): + return f"{self.subject} - {self.name}" diff --git a/core/templates/base.html b/core/templates/base.html index f2dc547..54fdabf 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -66,6 +66,9 @@ {% endif %} {% endif %} +