made model upgrade + comments display hierarchy

master
Laurent 6 years ago
parent c653ab8ca5
commit 23c8a550d5
  1. BIN
      db.sqlite3
  2. BIN
      news/__pycache__/models.cpython-37.pyc
  3. BIN
      news/__pycache__/urls.cpython-37.pyc
  4. BIN
      news/__pycache__/views.cpython-37.pyc
  5. 20
      news/migrations/0002_auto_20190917_1255.py
  6. 30
      news/migrations/0003_auto_20190917_1258.py
  7. 25
      news/migrations/0004_auto_20190917_1301.py
  8. BIN
      news/migrations/__pycache__/0002_auto_20190917_1255.cpython-37.pyc
  9. BIN
      news/migrations/__pycache__/0003_auto_20190917_1258.cpython-37.pyc
  10. BIN
      news/migrations/__pycache__/0004_auto_20190917_1301.cpython-37.pyc
  11. 27
      news/models.py
  12. 27
      news/templates/news/post.html
  13. 1
      news/urls.py
  14. 11
      news/views.py

Binary file not shown.

@ -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),
),
]

@ -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),
),
]

@ -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'),
),
]

@ -24,20 +24,39 @@ class Post(models.Model):
def top_comments(self):
return self.comment_set.all()[:5]
def flat_comments(self, user):
flat = []
for comment in self.comment_set.all():
# flat.append(comment)
flat.extend(comment.flat_children(0, user))
return flat
# return self.comment_set.annotate(ratings_num=count('voters')).order_by('-ratings_num')[:5]
# return self.comment_set.order_by('voters_num').all()[:5]
class Comment(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)
parent_comment = models.ForeignKey("self", on_delete=models.CASCADE, null=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
parent_comment = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)
body = models.CharField(max_length=100)
voters = models.ManyToManyField(User, related_name='voted_comments')
voters = models.ManyToManyField(User, related_name='voted_comments', null=True, blank=True)
date = models.DateTimeField('date published')
def __str__(self):
return self.body
def upvoted_by(User):
return user in self.voters
def flat_children(self, level, user):
self.level = range(level)
self.upvoted = user in self.voters.all()
self.score = len(self.voters.all())
flat = [self]
for comment in self.comment_set.all():
flat.extend(comment.flat_children(level + 1, user))
return flat
class Player(models.Model):
name = models.CharField(max_length=100)
post = models.ForeignKey(Post, on_delete=models.CASCADE)

@ -30,16 +30,23 @@
<br/>
<p>----Comments----</p>
{% for comment in post.comment_set.all %}
<p>
<form action="{% url 'news:upvote' comment.id %}" method="post">
{% csrf_token %}
<input type="submit" value="+1">
</form>
<span class="info">{{ comment.author.username }} - {{ comment.date }}</span>
<br/>
{{ comment.body }}
</p>
{% for comment in comments %}
<p>
{% for n in comment.level %}<ul>{% endfor %}
{% if comment.upvoted == False %}
<form action="{% url 'news:upvote' comment.id %}" method="post">
{% csrf_token %}
<input type="submit" value="+1">
</form>
{% endif %}
<span class="info">{{ comment.author.username }} - {{ comment.date }} - score = {{ comment.score }}</span>
<br/>
{{ comment.body }}
{% for n in comment.level %}</ul>{% endfor %}
</p>
{% endfor %}
{% endblock content %}

@ -7,6 +7,7 @@ urlpatterns = [
path('', views.index, name='index'),
path('<int:post_id>', views.post, name='post'),
path('submission', views.submission, name='submission'),
path('<int:post_id>/comment/<int:comment_id>', views.comment_with_parent, name='comment_with_parent'),
path('<int:post_id>/comment', views.comment, name='comment'),
path('upvote/<int:comment_id>', views.upvote, name='upvote'),
path('submitted', views.submitted, name='submitted'),

@ -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) })

Loading…
Cancel
Save