From 2b9b04091ad7dc02ad4d568095aa4273e15b6dcb Mon Sep 17 00:00:00 2001
From: ms01732 <mansoor.saleem@stud.th-deg.de>
Date: Fri, 28 Jun 2019 23:47:33 +0200
Subject: [PATCH] modifiy and upto date comment section

---
 myproject1/articles/forms.py                  |   3 +-
 .../articles/migrations/0001_initial.py       |  21 ++++++++-
 .../articles/migrations/0002_article_thumb.py |  18 --------
 .../migrations/0003_article_author.py         |  21 ---------
 .../articles/migrations/0004_comment.py       |  26 -----------
 .../migrations/0005_auto_20190602_2247.py     |  23 ----------
 .../migrations/0006_auto_20190603_0134.py     |  18 --------
 .../migrations/0007_auto_20190603_0240.py     |  18 --------
 .../articles/migrations/0008_article_tags.py  |  20 --------
 myproject1/articles/models.py                 |  16 +++++--
 .../templates/articles/article_detail.html    |  43 +++++++-----------
 .../templates/articles/article_list.html      |   2 +-
 myproject1/articles/views.py                  |  27 +++++++++--
 myproject1/db.sqlite3                         | Bin 208896 -> 196608 bytes
 14 files changed, 71 insertions(+), 185 deletions(-)
 delete mode 100644 myproject1/articles/migrations/0002_article_thumb.py
 delete mode 100644 myproject1/articles/migrations/0003_article_author.py
 delete mode 100644 myproject1/articles/migrations/0004_comment.py
 delete mode 100644 myproject1/articles/migrations/0005_auto_20190602_2247.py
 delete mode 100644 myproject1/articles/migrations/0006_auto_20190603_0134.py
 delete mode 100644 myproject1/articles/migrations/0007_auto_20190603_0240.py
 delete mode 100644 myproject1/articles/migrations/0008_article_tags.py

diff --git a/myproject1/articles/forms.py b/myproject1/articles/forms.py
index 3d30b16..0bc0e1b 100644
--- a/myproject1/articles/forms.py
+++ b/myproject1/articles/forms.py
@@ -15,8 +15,7 @@ class ArticleEditForm(forms.ModelForm):
         fields = ['title', 'body', 'slug', 'thumb','tags']
 
 
-
 class CommentForm(forms.ModelForm):
     class Meta:
         model = Comment
-        fields = ('content',)
\ No newline at end of file
+        fields = ('text',)
\ No newline at end of file
diff --git a/myproject1/articles/migrations/0001_initial.py b/myproject1/articles/migrations/0001_initial.py
index f00b5f1..70fa4af 100644
--- a/myproject1/articles/migrations/0001_initial.py
+++ b/myproject1/articles/migrations/0001_initial.py
@@ -1,6 +1,10 @@
-# Generated by Django 2.2 on 2019-05-19 12:29
+# Generated by Django 2.2 on 2019-06-28 21:36
 
+from django.conf import settings
 from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+import taggit.managers
 
 
 class Migration(migrations.Migration):
@@ -8,6 +12,8 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
+        ('taggit', '0003_taggeditem_add_unique_index'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
     ]
 
     operations = [
@@ -19,6 +25,19 @@ class Migration(migrations.Migration):
                 ('slug', models.SlugField()),
                 ('body', models.TextField()),
                 ('date', models.DateTimeField(auto_now_add=True)),
+                ('thumb', models.ImageField(blank=True, default='default.png', upload_to='')),
+                ('author', models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+                ('tags', taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Comment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('author', models.CharField(max_length=200)),
+                ('text', models.TextField()),
+                ('created_date', models.DateTimeField(default=django.utils.timezone.now)),
+                ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='articles.Article')),
             ],
         ),
     ]
diff --git a/myproject1/articles/migrations/0002_article_thumb.py b/myproject1/articles/migrations/0002_article_thumb.py
deleted file mode 100644
index fab11d0..0000000
--- a/myproject1/articles/migrations/0002_article_thumb.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.2 on 2019-06-02 10:59
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('articles', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='article',
-            name='thumb',
-            field=models.ImageField(blank=True, default='default.png', upload_to=''),
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0003_article_author.py b/myproject1/articles/migrations/0003_article_author.py
deleted file mode 100644
index 7b983d3..0000000
--- a/myproject1/articles/migrations/0003_article_author.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Generated by Django 2.2 on 2019-06-02 14:01
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('articles', '0002_article_thumb'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='article',
-            name='author',
-            field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0004_comment.py b/myproject1/articles/migrations/0004_comment.py
deleted file mode 100644
index 48d33fc..0000000
--- a/myproject1/articles/migrations/0004_comment.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Generated by Django 2.2 on 2019-06-02 14:58
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('articles', '0003_article_author'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Comment',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content', models.TextField(max_length=150)),
-                ('timestamp', models.DateTimeField(auto_now_add=True)),
-                ('article', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='articles.Article')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0005_auto_20190602_2247.py b/myproject1/articles/migrations/0005_auto_20190602_2247.py
deleted file mode 100644
index da8ea25..0000000
--- a/myproject1/articles/migrations/0005_auto_20190602_2247.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 2.2 on 2019-06-02 20:47
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('articles', '0004_comment'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='comment',
-            old_name='timestamp',
-            new_name='date',
-        ),
-        migrations.RenameField(
-            model_name='comment',
-            old_name='article',
-            new_name='post',
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0006_auto_20190603_0134.py b/myproject1/articles/migrations/0006_auto_20190603_0134.py
deleted file mode 100644
index 893540e..0000000
--- a/myproject1/articles/migrations/0006_auto_20190603_0134.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.2 on 2019-06-02 23:34
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('articles', '0005_auto_20190602_2247'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='comment',
-            old_name='date',
-            new_name='timestamp',
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0007_auto_20190603_0240.py b/myproject1/articles/migrations/0007_auto_20190603_0240.py
deleted file mode 100644
index 1869170..0000000
--- a/myproject1/articles/migrations/0007_auto_20190603_0240.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 2.2 on 2019-06-03 00:40
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('articles', '0006_auto_20190603_0134'),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name='comment',
-            old_name='post',
-            new_name='article',
-        ),
-    ]
diff --git a/myproject1/articles/migrations/0008_article_tags.py b/myproject1/articles/migrations/0008_article_tags.py
deleted file mode 100644
index 91b36f7..0000000
--- a/myproject1/articles/migrations/0008_article_tags.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by Django 2.2.1 on 2019-06-14 09:12
-
-from django.db import migrations
-import taggit.managers
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('taggit', '0003_taggeditem_add_unique_index'),
-        ('articles', '0007_auto_20190603_0240'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='article',
-            name='tags',
-            field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
-        ),
-    ]
diff --git a/myproject1/articles/models.py b/myproject1/articles/models.py
index 64098bd..b804878 100644
--- a/myproject1/articles/models.py
+++ b/myproject1/articles/models.py
@@ -1,6 +1,7 @@
 from django.db import models
 from django.contrib.auth.models import User
 from taggit.managers import TaggableManager
+from django.utils import timezone
 
 # Create your models here.
 class Article(models.Model):
@@ -22,11 +23,16 @@ class Article(models.Model):
 
 
 class Comment(models.Model):
-    article = models.ForeignKey(Article,  on_delete=models.PROTECT)
-    user = models.ForeignKey(User,  on_delete=models.PROTECT)
-    content = models.TextField(max_length=150)
-    timestamp = models.DateTimeField(auto_now_add=True)
+    post = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments')
+    author = models.CharField(max_length=200)
+    text = models.TextField()
+    created_date = models.DateTimeField(default=timezone.now)
+    #approved_comment = models.BooleanField(default=False)
+
+    #def approve(self):
+         #self.approved_comment = True
+          #self.save()
 
     def __str__(self):
-         return '{}.{}'.format(self.article.title, str(self.user.username))
+        return '{}.{}'.format(self.post.title, str(self.author))
 
diff --git a/myproject1/articles/templates/articles/article_detail.html b/myproject1/articles/templates/articles/article_detail.html
index 97020b7..f46ea10 100644
--- a/myproject1/articles/templates/articles/article_detail.html
+++ b/myproject1/articles/templates/articles/article_detail.html
@@ -5,40 +5,29 @@
     <div class="article">
         <img src="{{ article.thumb.url }}" />
         <h2>{{ article.title }}</h2>
+        <h3>Written by {{ article.author.username }}</h3>
         <p>{{ article.body }}</p>
         <p>{{ article.date }}</p>
-        <p>{{article.tags.all|join:", "}}</p>
+        <p>{{ article.tags }}</p>
     </div>
 </div>
-{% if article.author == request.user %}
-<div class="section-1" style="float: right;">
-<a href="{% url 'articles:article_edit' id=article.id %}">
-    <button type="button" class="btn btn-outline-success">Edit</button>
-</a>
-<a href="{% url 'articles:article_delete' id=article.id %}">
-    <button type="button" class="btn btn-outline-success">Delete</button>
-</a>
-</div>
-    {% endif %}
 
-<br><br>
 <hr>
 
-<form method="article">
-    {% csrf_token %}
-    {{ comment_form.as_p }}
-    <input type="submit" value = "submit" class="btn btn-outline-success">
-</form>
-
-<div class="main-comment-section">
-    {{ comments.count }} Comment{{ comments|pluralize }}
-    {% for comment in comments %}
-    <blockquote class="blockquote">
-       <p class="mb-0">{{ comments.content }}</p>
-       <footer class="blockquote-footer">by <cite title="Source Title">{{ comment.user|capfirst }}</cite></footer>
-    </blockquote>
-    {% endfor %}
+<form method="post">
+  {% csrf_token %}
+  {{ comment_form.as_p }}
+  <input type="submit" value="Submit" class="btn btn-outline.success">
 
-</div>
+</form>
 
+{% for comment in article.comments.all %}
+    <div class="comment">
+        <div class="date">{{ comment.created_date }}</div>
+        <strong>{{ comment.author }}</strong>
+        <p>{{ comment.text|linebreaks }}</p>
+    </div>
+{% empty %}
+    <p>No comments here yet :(</p>
+{% endfor %}
 {% endblock %}
\ No newline at end of file
diff --git a/myproject1/articles/templates/articles/article_list.html b/myproject1/articles/templates/articles/article_list.html
index 0270f1a..08cedf5 100644
--- a/myproject1/articles/templates/articles/article_list.html
+++ b/myproject1/articles/templates/articles/article_list.html
@@ -26,7 +26,7 @@
     <div class="articles">
     {% for article in articles %}
         <div class="article">
-            <a href="{% url 'articles:detail' slug=article.slug %}">
+             <h2><a href="{% url 'articles:detail' slug=article.slug %}">{{ article.title }}</a></h2>
                 <h2><b><i><u>{{ article.title }}</u></i></b></h2>
             <p>{{ article.snippet }}</p>
             <p>{{ article.date }}</p>
diff --git a/myproject1/articles/views.py b/myproject1/articles/views.py
index 0ab2551..3097ba4 100644
--- a/myproject1/articles/views.py
+++ b/myproject1/articles/views.py
@@ -1,13 +1,16 @@
+from django.urls import reverse
 from django.http import HttpResponse, HttpResponseRedirect, Http404
 from django.shortcuts import render, redirect, get_object_or_404
 from taggit.models import Tag
 from django.views.generic import DetailView, ListView
 from .forms import  *
+from . import forms
+from .forms import CreateArticle, CommentForm
 
 
 from .models import Article
 from django.contrib.auth.decorators import login_required
-from . import forms
+
 
 
 
@@ -40,12 +43,26 @@ def article_list(request):
     return render(request, 'articles/article_list.html', { 'articles': articles })
 
 
+def article_detail(request, slug):  # return HttpResponse(slug)
+    post = get_object_or_404(Article, slug=slug)
+    comments = Comment.objects.filter(post=post).order_by('.date')
+    if request.method == 'POST':
+        comment_form = CommentForm(request.POST or None)
+        if comment_form.is_valid():
+            text = request.POST.get('text')
+            comment = Comment.objects.create(post=post, author=request.user.username, text=text)
+            comment.save()
+            return HttpResponseRedirect(request.path_info)
+    else:
+        comment_form = CommentForm()
+        context={
+            'article': post,
+            'comments': comments,
+            'comment_form': comment_form,
+        }
 
+        return  render(request, 'articles/article_detail.html', context)
 
-def article_detail(request, slug):
-    # return HttpResponse(slug)
-    article = Article.objects.get(slug=slug)
-    return render(request, 'articles/article_detail.html', {'article': article})
 
 
 
diff --git a/myproject1/db.sqlite3 b/myproject1/db.sqlite3
index 0663026b98a1dbb107902a27a2bff438f484a6f5..09747ac0b8bf0688c98ef51a8cf536f39085e370 100644
GIT binary patch
delta 3297
zcmdT`du&_P8Nc7Te!q^>Jlr;MeDf$RZR}j%>+5S53U$+vq||QHC2bP{nPWSSQ$JeA
zX_K(2afddEv5Ig7XG4s~fP#vWjb<XK(<EAHf`L>Xf^FK+#-r2LPFkb!W|i2vcABN0
zCbU0i`JQv`_xm2d`<?H6_s+a$nVGTNzkUtFGfe5CQ|Y&FwoO0`|NJ)}##`H|q_)vY
z$2!v#gI~rE;W%!x{l@mBEn%y-zHNQX+HbX6E?DlhbeX?2pE0M*t)>r5^QNhVCa%+j
z#5(1XdRLv_Ed)5hyH)gW^#whCIUxB3p;mckZBz9sxg?2x(YL)ud9%K)!o=s}{lQ>I
zwNl;CUIBUKU?9kMtx*m(h!qeo3B2sPtx9>KLAVYIc!FNZEAhA6l}inB1*H1(^C7JG
zo$d<A?+@@k?+%+X<@8iQk}tr^{_R%fm(J_S2Rvd>76q}xqI~7No_xUL4f;ia?=~wt
z8+{cHdA}qEeWFQ8RwPjN1SQEQ`8thC$2zg*-<g#?azK_OZ?{1?S>aChQ09KGaI;>y
zciraeY<xjM7I?2td1aleYPB;_lH{QBPGg{E_4dggLE!xXztZGt=dK5MNt6Qu&uSUR
zhEOz~NoAGy*VZ<y?6BWMH_GqzwIeN4OEo46qpCvHDg~LB0s&EZ*|mXR?c48>Bt9q$
zY9X4i#Ntc%ZTt&-6hDl=kE8fGybDVURWs}G@#-qpZH(p%saQHOJ`~GkGKp-V*3Py=
zA(~943Pb9Yh^GpP463%R)?GHL*0Ebar8aapk<X;Y$5Xj%o7KuT8A`%rJ~wgLVqsmz
z((S}}B2PKlFxylLU@1pH4lOH!a?VoiHdnK(+Yld%W|O(0Qc{M}xnwO+M$5uXDw&TK
zXqfT3pYZ&d8L*qFOR$}1=wDCI(F?XaPuv9B@IBg4N{k*WWCDr6QT|9Fo6U-e;Gx*$
zgeWIReAAhj9O>(o2Ksu1a98K#z;rqtIWTxAEQF=Vbl4ji3yXtY`!WO5hr~$V;Ml<Q
z{?W+J+YW`v`);;gxthuM^@w3%V0v(@SD?V?p00gkkplzM;l2TC5Sye<jtw5zKStNn
z;jtcRFf-r{3%!#)S$-R>prD(V-Cm(|&gHG5;1PV16bz^jWK<srCmEciyL2aJi*=y9
z_ek^cT~kK_8F^n%N;){$+PQBs)Y&n-J2fgsd&T`nclAw7?;G(R>l_`7ckk#5Mtk=6
z`QlS!gF;|A+)9a*!twNM%7Jh+JD$ts%Y0TVcs&w5ZGvnnaruP7pD<vebS`1DiLEy-
z+o^09;3bw@&@5^A1;f(k?H;T483sdy!L7Ep%nulj>svKvH5PV{Zdm)e>8c6Y9M)YB
zK|g>mA<m2u&vv+3!!YR2q^BF+Tl^{mfEFHrgGggM!)#Li&bDfb_G&!|ZHI1hUk}vG
zE*Z$sZfGM9?Syj+N$p9bvwX<x?R1g*<KR?&Wwbl3&%vC-<$~|F6r#iF#7gaz7K@$T
za1lY0oQwmnHPBR_RW_SF<dqJ%K(^fuXBXd!fFBkNGhbl0_EQEUFQdI(^CJ78<~y1Q
z^5U57=QhsTZTXh@dDEh?*RamC$h>Ae&V*(|)h6R{SaS5Zp}2t*=TIHt=aCa`Bvr%U
zAe-h<Et#H2oQ7(RkVogy7TCD>>OArTdm`FOdY?reXj+_k774%>{Y}Jm8gbA_wx321
zBC&<QArM$jY*rT=iTyM(gKP0z8g2nKfh~)#g}{YOC!}`0!|jH9oWz!f4X}y$((nzf
z`s_J!-wvpE77~+%W=<Ws$eunf(!YCm8`m7mC!&Q!oID<bwR(DgI5%D(-VSIX|CmG7
zq;C$juqR?3^5c2bwnDpj%uOD93f%=aC`YWdMDr|KL+~lIp4|F0I*7X46wbO=aoP;z
z(G=ui3#l4|U$e#jP2@*Uqkh;xes&6RszH=K(2-N<7HCyPeTEzKj%Yg+`^n=^qmAU-
z&maT2=^0c-$y~Frt5UyVgWl0k6}PF14pOJazo;rUmldfXaAwI+DovMNZHSCr9he4s
z)zf;uf~y!+jPUOne3=eq@vB&{Ar0ejj33VB3#FlkX4&Z+$>j>e(RBLStey{qFEjXK
ze3`oYBW^ab4k#HQGwU?|uX<%JR~Y;`zC!(dh@E=c|BV28qyu$f)R#kk#^9^?Gph18
zT&rP?fLPXOEJO6P{u6&fp-Y%{R@GF)uGrCnzKTDk;ALE=f@qcDM-2WFe?+mr;B`6;
z7^$U}PS-*%G58C-MB$5gy+KQ1iX$CePz{wg;JX=oH^q<O<3$8UnyzAPsAVMw*K%=f
z=2GKaW{Mk$9?ebU={trirHzYb<6IAy&K*r~g&cP{9i8G*1um5>>E;tun#v?9I#yt-
z&+FkOf56Mf6C=?Hd%EB`oK2QlooDcQ%IZbjeKY8odO38hef1PJmKmh-;{|T{_4gm1
zrGQ6}=-XN>_rj0qUQ=&0eU<wQ_$o~<#jfBjG#%=OSkXns#tborKNxoCf2#YQ_Ia&|
zy^Gy~_M%UrpBaL+I5j(a6Fu#ngpI)_Fp%~v)RIsPrnI-|9D8n5yV_dv+ZZ%z+KZDr
z$x~0F&7dc*KZ!1&svYEu7|hlf6U>_4Ex@F*x=tO9%rIhy+9Vp3myB967l$g=;|-B>
zaS#pL^`*|(q<p1+WbuayFaSv8i4iyjKGL0pcR(bKqp%s=N|mXa+%XD&HQEKeV-Ia<
zUh=2YsIEzE3`42-kQ5BYh7+-1<@ZCI+U;ESN;UHSAy{u&mNws5tn-rTIdm&*E;q+F
z=TOMN>%X>l(oN85{_pzR9c;0ti=>BP8}Q`xFzh##i)p1`^vebF!W*Em8<v|CF4fZP
tUhM;KXmo(zW$?RH@)q{AuwmoZecY4-e8AujsLk(iqmvC8|ND2xzW^rxaKZop

literal 208896
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

-- 
GitLab