From 23c8a550d516f876839e0c6b08386d4e436f06ec Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 17 Sep 2019 17:23:23 +0200 Subject: [PATCH] made model upgrade + comments display hierarchy --- db.sqlite3 | Bin 192512 -> 196608 bytes news/__pycache__/models.cpython-37.pyc | Bin 2485 -> 3179 bytes news/__pycache__/urls.cpython-37.pyc | Bin 713 -> 795 bytes news/__pycache__/views.cpython-37.pyc | Bin 4655 -> 4912 bytes news/migrations/0002_auto_20190917_1255.py | 20 ++++++++++++ news/migrations/0003_auto_20190917_1258.py | 30 ++++++++++++++++++ news/migrations/0004_auto_20190917_1301.py | 25 +++++++++++++++ .../0002_auto_20190917_1255.cpython-37.pyc | Bin 0 -> 716 bytes .../0003_auto_20190917_1258.cpython-37.pyc | Bin 0 -> 920 bytes .../0004_auto_20190917_1301.cpython-37.pyc | Bin 0 -> 812 bytes news/models.py | 27 +++++++++++++--- news/templates/news/post.html | 27 ++++++++++------ news/urls.py | 1 + news/views.py | 11 +++++-- 14 files changed, 125 insertions(+), 16 deletions(-) create mode 100644 news/migrations/0002_auto_20190917_1255.py create mode 100644 news/migrations/0003_auto_20190917_1258.py create mode 100644 news/migrations/0004_auto_20190917_1301.py create mode 100644 news/migrations/__pycache__/0002_auto_20190917_1255.cpython-37.pyc create mode 100644 news/migrations/__pycache__/0003_auto_20190917_1258.cpython-37.pyc create mode 100644 news/migrations/__pycache__/0004_auto_20190917_1301.cpython-37.pyc diff --git a/db.sqlite3 b/db.sqlite3 index a79e04903559002e7c508c9441cc262ebef7f3d3..7acf0aa82fd6f91ac937de325e746c9d1cd8cdf5 100644 GIT binary patch delta 2172 zcma)7Yitx%6u$S)ot@6M-BW0{1q*b$*aFgS=dsh>9ip-Em;Mm2zDR}b(p_n_v`xEx zK&_>apivXSjTtop(HQ+Fj|Q6P4~1y>Cp9sEArvB_VB1)Hkti{qJ6p<9g1X5)_wLO7 z&htBGc3jNgv7=y5`GR$X5DixiE{dyvZ;eUU9d7;rB)|7)Mk%WD^r%Pz^q zn)9)S70tyOwiUI_Xvi}3h;G=$F4megY}^U9=7BBSvO>{_W`(uUw(@L~?6eN4&jriwuPY zQU%4RTjRYwscu$QBAEi%6L0Ch6^>=YBQwZCy3>@6?WIly~`LxJ2MD_#J*mk1vfb==vI*nS+e4=CUkN%DF2g zS28Y9m3vW(3|9!;fa~xJOv4pKod(V&m1d?cEb_^|W&(Sl(f7A+pRXB%e$+R-Mpj7! zl&_|$nwz^YX59`Oq54=jrfb&rw(V_!7Ncn}m`Em5$)Ft=92(ll<6MCK{Zys5gY~ej zYoQpH+=v-7-Ju z4(b&yjVO2eq}yhF$c%*}vDp9gX*oKD5&vrrJ{+go8{>ST0uwp4g-bAj_3Z*@H?XIp zqR5I69wB5Q+`>!Z#3V^o1w9lP7o@rjzrhqtz!?}v6`#No5655>#oas}cjL0VG44zq zV2eKD0j8k`XDR#yf1rx*k(U#27U3tdytJ7jxX3)NL`D+oQj|$VoY5nyvaAp1C{lD9 zDS92w!4Gf|m3#?n#VuDwmf(zoc;YI;APDtH5>X4~2~s2-AyDZn_3ro9s2}qy@_T%} z=eRtbe@r@3ut}}Tdq0oTNgP$jX+)l&C(BTrD66ZZyKB>l&F!gdi|4fK9S<}o(M*e- zH(y{cJHtb)C^O@gGhIrp^TiNb?=%mw1Yb3>|=S((g9ZFqy|`kd7g1rZetNzdF$=i;5K%Eay0s` zvuu#PBz&*OfOsPtm|j_&JCgG(>_*A@0)|d+$(+ME~`l?tE$S$*4$jn zopJx2qcQ)BY?781qCX0pBJd~t3X@2j^KcqYxztswC58AKs7jpIfmKEDAewHjC(Qs3 z5-n!y(U7cgLRAGxiJM23#l~eWHs(xLu*HI$qCEsXXVA)R<|PnTe;Q=W1P2*rb;~QR~D5R`Gr9^y7l5;7+52|J3H#Mw>!Vyz5 zOjhj?ImC529q580;*PARTE2P|137sA0xmUB}Ugtr6^UiX2;t_< lVcDXgK~b~{U1Y#hX;v_F!^Ed|sUTZP6|z|P>0kyb{{eci6lMSb delta 700 zcmZ9J&r4KM6vy8^_daLd%;7?yIp4HY+$$Q=DgN!z6k7LB^QE^gG>yj#qx%4D&bTsBJqZ#&#c4n(B zxTJm%AJuyzl5W#W53sSG7q(PHx)t7FM9EsQ}qd1Ii{dubG_p}Et{O&ueE zRy731VR|wKt@JYryGS1aC)JL_ex8gpQ*IdAXmbqgX1uV7+DD+5CzV6=AP)7cI^XAW z91g9g__WHjiPjR6X^MLnZT5cb6Q0dmJuPQwwXQ z%mj2$*908RY&!>8R+RT;Rl(o*4OgXeuhFM+CN24UgWybqJhWm#UvWi3OGqm|*e*TK iS)PB#oGiXU%1uM5EUx7ju_lXe5%cY~Ht}!)f`0%Kz`N@J diff --git a/news/__pycache__/models.cpython-37.pyc b/news/__pycache__/models.cpython-37.pyc index 4ff7462e8cdd3d532d15cf60b55b2ccce4155381..d7b7439a2298a4569e8cc003461dfd94c44416b8 100644 GIT binary patch delta 1282 zcmZ`&&1)M+6rVSzxvyo)Wj_kDgR3LUgLP&`d+NOn`Odz2R3yx7V6DPJTC$sC| zrYjUk4!xK{=O2)u=RyuW6bk(h3cW7m4=6eG(pxWmZ&pc3AhXPy_cia$zV~~-9DO-o z`@C8$GhCPcd9v|G>3QuhfbY$(&T%u(yA@e`#^Q#Yy}>%68S0LChuo*QlV?a2i$SuOE3xe;ciY3$mmv9}hy$xDS&ca4ahYW4Og%ulhfX|$Qbl?r z=^sK|MWLoTJeK7J6wnO zuG|^y_xl~Nf-PxB6#NHdb?@}MgB@K*9(^Kn%dNLWUeOB6t>osQyQ?%g>JO2a@7#-U z#ykj?;Jo?MT^#kOnY8F6j96R{yi%6JHsA5^O|Xs`mrz$U)O)m-DxF|9LAtj(S>As@ zcDZ@yTS}W);9&!&f3@cNtl7u>%@l zq!21xU&bgc^RJ)6nuXU_=7(T);ob2lRO1SU`I16;NQzMUiYb@w&a9$BQzn#O1as!c L(vsVXno;RL{A&Z* delta 623 zcmZ{gL2uJA7>4^LX_`7|Qqp#Vjjk0)un4W)Cbsj$1h?(7iGw8+b+eH`Z8DsI1RMYf zj@>5t4={1&u*0qsCw@dVaYy?D9QS?MhPYtMuiyByAHVVW&69@zs8(YoY-gwMpFOP{ z`@aD`>Ob(w+A2l9{$iX1*RRYib2Dn`Mb^~ctwWg6OWw5RW%jU%CmjgED>}QH9a9BZ z*d^|DE2CM%ktIm)ez0U!nlCHD5a!tA480|+e^y-do+t}@47`Tkmw~7VXKe7gG{4>u z)g$1cV8Z=e;tk51=RZPaWs z^Gd7=@{3F2GgIvJlk;wYOVqka-;=lkukl_Ht#fK)U7pd~6u=g^jGNuTmvSjh3 z2tav)Kpt<3Ae1LGai63(Q;HZ+P#{GdB$&<}C72=+%%CYb@lWjJX^d+ag(f>Qg{TMt r%`FlJ5h6h17I$e;PC;TxNorAE@k)jw36O-uTFv$V{2HPi( diff --git a/news/__pycache__/views.cpython-37.pyc b/news/__pycache__/views.cpython-37.pyc index ecf9d3c42ca52d36f604a8dffe7cec6bf4e96e3d..2d1637903a276365441da5c1ae850f1c43cf79fc 100644 GIT binary patch delta 889 zcmYLI%}*0S6rVS<-EKd2+ag4*L_@%mRilY|-~ft%2V>wMJprbcZV47jo7vGuvk0*s z?ZM2|Lwh$-!(IIkyzkNfz>D!>;(NQa?B@OU&6_v#e(z&H&wMF4OSYY6_)Pshe!4mS z!MOliUuVl;yWX{TY~!|>CrSXzrl+CIW*oa6qo=@AiwM4P4jg zT6*YfphVeZQBf>lm<@|K193ig8n@DUu68T!szi=1ms9907YU|EFoRl{JoP`qg&)NM zxrKU-l41JwDk5?1s69DLlZ?atXl&IZyhE{^p#o z<>Uk{T!JFOBLZR{w`2je(1{B%Y>K=@+fgsB(6;%qrRvfTMb+~pwLn@3u5ns6{Vz8? zFE`Qj7R4V!hJ$}iG zL{{EIa8q##QEnBoJ|l>-B+9WT^-JDI7*eg0f!Ze*w39Cud#L)+e}X)Tr3rGI{O_DB l=AQsO*19lTEYkrRK}pjVpQmi)w*FZt!JPh6m=nUv{0ApLv9$mI delta 636 zcmZuuO;1xn6rDTo_4U#AJxaAf#rTo(kx2|DYJd<_C<|jqNUU9;0>&^UQY>xeO(lUx zO2R@Hc421cs@=#EO#gttz#s6I`~wzl*xhUf76 z?uvcotA7p3KgPByaPOzjd&il-6~Ixf}9o zUnfQLT>xY{=`I7NGuo4O2r`>Du!XomJwPQ zK?VUAGlHARV7L&s{=b<==2dpY*XUky`m$J35cC{{?@ zzL-RX=B&SPCvut%GV%#K0cmG{MXX{j9`vRMN&wGIJ2#duA*1L&6@6W-QmvX_xlx!f JzjIUI{sH9Dc#;4B diff --git a/news/migrations/0002_auto_20190917_1255.py b/news/migrations/0002_auto_20190917_1255.py new file mode 100644 index 0000000..1c0ce04 --- /dev/null +++ b/news/migrations/0002_auto_20190917_1255.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.5 on 2019-09-17 12:55 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='comment', + name='author', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/news/migrations/0003_auto_20190917_1258.py b/news/migrations/0003_auto_20190917_1258.py new file mode 100644 index 0000000..b3cc510 --- /dev/null +++ b/news/migrations/0003_auto_20190917_1258.py @@ -0,0 +1,30 @@ +# Generated by Django 2.2.5 on 2019-09-17 12:58 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0002_auto_20190917_1255'), + ] + + operations = [ + migrations.AlterField( + model_name='comment', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='comment', + name='parent_comment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='news.Comment'), + ), + migrations.AlterField( + model_name='comment', + name='voters', + field=models.ManyToManyField(blank=True, null=True, related_name='voted_comments', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/news/migrations/0004_auto_20190917_1301.py b/news/migrations/0004_auto_20190917_1301.py new file mode 100644 index 0000000..fa80a8a --- /dev/null +++ b/news/migrations/0004_auto_20190917_1301.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.5 on 2019-09-17 13:01 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0003_auto_20190917_1258'), + ] + + operations = [ + migrations.AlterField( + model_name='comment', + name='author', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='comment', + name='post', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='news.Post'), + ), + ] diff --git a/news/migrations/__pycache__/0002_auto_20190917_1255.cpython-37.pyc b/news/migrations/__pycache__/0002_auto_20190917_1255.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f179e436d7c8ec7fcfec01ad72be4a096b5c3067 GIT binary patch literal 716 zcmYLH&2G~`5Z?9rFK$XXAtAv7{&Bx#nPxBO=Ac9I# z(~MFVd(x{}#%e$FyPU}&3ttl9i{Kj(0kA6i%CbnXIT?h%@qaR)Hg2G8OSNnUo=xg< zY4Wzzs!FsL6a?(-dDz5<{&IgwzNO3mUvoY`LoZEzR#H}S@+~@q`I+qUXG65@40#s2# zV;Ih7lc{XMoVZ(zliVgJ+CaHfui@H;qRQ1$TTfirxMPBf+309GKbjuTjOXxs)5ZBK zzL?M6@zb}*vo|);E4bD6J28(C)44yhbkTrmQkky}j++Yjl&NO#{KD|$4_79Y`#CQMz literal 0 HcmV?d00001 diff --git a/news/migrations/__pycache__/0003_auto_20190917_1258.cpython-37.pyc b/news/migrations/__pycache__/0003_auto_20190917_1258.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef15007084b50e9e3541f61dfff2bca46ccbfd55 GIT binary patch literal 920 zcmZWn&u`N(6n5eyP1APU4e>)9;FL?#4NWkF&`Q^V1RWCFE|HLx)m~}l*u_qV1`;4e_BjhVw_!l_woHR^gj{N-m^7%b~pWm}yFG4Ur{rK|s7e?r(-891kXBVb^42B}= za8x*{<5=J2Zh=!=c&S(IG56EpIieo*zai=~oVUK>v_tCcH7m=xnCaLx zQ8AyXtei`sO;AY6xIUO#Tr)c0?84Na!7!9M6s0b8W=@Kkm;2PEm<4$YDtau;+j)>j zd53lL9`!Fh8eBH0)^!vO|HHHavt~2VsLIf(Gt6+hPP@RMXWEnIx^Q<-un*eY7z_qm zBwLn}Yz;Pd20NP%$>!GfwrNdeQ7}=O0Diuc>L~V%f5J0y1}B%Co3<1L2(ywIx0Epk zF{}VYWCa6=wf^axacb5UnSxAYmGNWOR_>3Q{O7V{N}Dyi(gvhsPuWLRRzcHMjA!<* zO{;nkI*2z+NUA*{CL#oiFF6ChOUV0W#x2tBC|fW=nV8O*R?r;CL_-b*_wCh`?G6*| zOU33h@seGbfaaN)N#oKJ6IS%#aZPJ9JRA-8#>%z$_2Kc+3vzroenTd&_r|Zx`Xmz< zN7C9Vt%>A3oh7dr)w6B1ne zL-GcAF94tKv2?gGtPUufLobV5S!7oI1frF{ieH7{o>v~^I- zXELegqEy-|1czK5r6z7Y46j|B>Ma70*y1F%xizz53Qp#7n^W+z7I(nU+L@OHSqHjV zkGm_%z12FV)x`W8#eLphIVNUi$5(iO3_H4gxTb^LoDx1NePb{fY_Vin3AQ;H?hJN@ z_t|js-UHoAMNvRmX%9Ew33(h+JhIGl-4-Q7B~XF3D}nByR>sPt01Pqcp3WiX+F1xy zeQKMF`mfLo9qmr@q&$;Gx9k|`A{>Pq+GlkF#&p0KCS2x#c9*gD%Op2R&5FYUN)BZ@ z2PG+<)WImPKpvRuq-muN4upjHtb7jV+T&SL&V;u4RQok$?1XOZjV61e{jtQSK=j7w z;2HzorZcp73FC|w0+^>(^`3>_SRo# lzj

----Comments----

-{% for comment in post.comment_set.all %} -

-

- {% csrf_token %} - -
- {{ comment.author.username }} - {{ comment.date }} -
- {{ comment.body }} -

+{% for comment in comments %} +

+ {% for n in comment.level %}

    {% endfor %} + + {% if comment.upvoted == False %} +
    + {% csrf_token %} + +
    + {% endif %} + {{ comment.author.username }} - {{ comment.date }} - score = {{ comment.score }} +
    + {{ comment.body }} + + {% for n in comment.level %}
{% endfor %} +

+ {% endfor %} {% endblock content %} diff --git a/news/urls.py b/news/urls.py index 8b4710e..644e8e6 100644 --- a/news/urls.py +++ b/news/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ path('', views.index, name='index'), path('', views.post, name='post'), path('submission', views.submission, name='submission'), + path('/comment/', views.comment_with_parent, name='comment_with_parent'), path('/comment', views.comment, name='comment'), path('upvote/', views.upvote, name='upvote'), path('submitted', views.submitted, name='submitted'), diff --git a/news/views.py b/news/views.py index e364eba..e6e864d 100644 --- a/news/views.py +++ b/news/views.py @@ -85,7 +85,7 @@ def index(request): def post(request, post_id): post = get_object_or_404(Post, pk=post_id) - return render(request, 'news/post.html', {'post': post}) + return render(request, 'news/post.html', {'post': post, 'comments': post.flat_comments(request.user) }) @login_required def submission(request): @@ -125,9 +125,15 @@ def submitted(request): return render(request, 'news/submitted.html', {}) def comment(request, post_id): + return comment_with_parent(request, post_id, None) + +def comment_with_parent(request, post_id, comment_id): comment = Comment(author=request.user,date=datetime.today()) comment.post = get_object_or_404(Post, pk=post_id) + if comment_id is not None: + comment.parent_comment = get_object_or_404(Comment, comment_id) comment.body = request.POST['body'] + comment.save() comment.voters.add(request.user) comment.save() return HttpResponseRedirect(reverse('news:post', args=(post_id,))) @@ -136,4 +142,5 @@ def upvote(request, comment_id): comment = get_object_or_404(Comment, pk=comment_id) comment.voters.add(request.user) comment.save() - return render(request, 'news/post.html', {'post': comment.post}) + post = comment.post + return render(request, 'news/post.html', {'post': post, 'comments': post.flat_comments(request.user) })