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 %}
-
-
- {{ comment.author.username }} - {{ comment.date }}
-
- {{ comment.body }}
-
+{% for comment in comments %}
+
+ {% for n in comment.level %}
{% endfor %}
+
+ {% if comment.upvoted == False %}
+
+ {% 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) })