From 70d63988635c6df495deb4be52b32d16fcd4af54 Mon Sep 17 00:00:00 2001
From: Nathan Chapman
Date: Tue, 19 Jul 2022 15:42:10 -0600
Subject: [PATCH] Add basic forum functions
---
src/core/models.py | 10 +++++--
.../core/comment_confirm_delete.html | 13 +++++++++
.../templates/core/comment_create_form.html | 12 ++++++++
src/core/templates/core/comment_detail.html | 12 ++++++++
src/core/templates/core/comment_form.html | 13 +++++++++
src/core/templates/core/comment_list.html | 19 +++++++++++++
src/core/templates/core/post_create_form.html | 4 +--
src/core/templates/core/post_detail.html | 28 +++++++++++++++++--
src/core/templates/core/topic_detail.html | 9 ++++++
src/core/templates/core/topic_list.html | 25 ++++++++++-------
src/core/urls.py | 6 ++--
src/core/views.py | 22 +++++++++++++++
12 files changed, 154 insertions(+), 19 deletions(-)
create mode 100644 src/core/templates/core/comment_confirm_delete.html
create mode 100644 src/core/templates/core/comment_create_form.html
create mode 100644 src/core/templates/core/comment_detail.html
create mode 100644 src/core/templates/core/comment_form.html
create mode 100644 src/core/templates/core/comment_list.html
diff --git a/src/core/models.py b/src/core/models.py
index 49f9185..05dc210 100644
--- a/src/core/models.py
+++ b/src/core/models.py
@@ -19,8 +19,11 @@ class Topic(models.Model):
"""
name = models.CharField(max_length=255)
+ def __str__(self):
+ return self.name
+
def get_absolute_url(self):
- return reverse('core:tag-detail', kwargs={'pk': self.pk})
+ return reverse('core:tag-detail', kwargs={'topic_pk': self.pk})
class Tag(models.Model):
@@ -118,7 +121,10 @@ class Post(models.Model):
objects = PostManager()
def get_absolute_url(self):
- return reverse('core:post-detail', kwargs={'pk': self.pk})
+ return reverse('core:post-detail', kwargs={
+ 'topic_pk': self.topic.pk,
+ 'post_pk': self.pk
+ })
class Meta:
ordering = ['-pub_date']
diff --git a/src/core/templates/core/comment_confirm_delete.html b/src/core/templates/core/comment_confirm_delete.html
new file mode 100644
index 0000000..694d7e0
--- /dev/null
+++ b/src/core/templates/core/comment_confirm_delete.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+
+{% block content %}
+Delete comments
+
+{% endblock %}
diff --git a/src/core/templates/core/comment_create_form.html b/src/core/templates/core/comment_create_form.html
new file mode 100644
index 0000000..bc428c7
--- /dev/null
+++ b/src/core/templates/core/comment_create_form.html
@@ -0,0 +1,12 @@
+{% extends 'base.html' %}
+
+{% block content %}
++ New comments
+
+{% endblock %}
diff --git a/src/core/templates/core/comment_detail.html b/src/core/templates/core/comment_detail.html
new file mode 100644
index 0000000..48e01e2
--- /dev/null
+++ b/src/core/templates/core/comment_detail.html
@@ -0,0 +1,12 @@
+{% load helpers %}
+
+
diff --git a/src/core/templates/core/comment_form.html b/src/core/templates/core/comment_form.html
new file mode 100644
index 0000000..b4698c1
--- /dev/null
+++ b/src/core/templates/core/comment_form.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+
+{% block content %}
+Update comment
+Delete
+
+{% endblock %}
diff --git a/src/core/templates/core/comment_list.html b/src/core/templates/core/comment_list.html
new file mode 100644
index 0000000..e72ea16
--- /dev/null
+++ b/src/core/templates/core/comment_list.html
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+
+{% block content %}
+Comments
+
+ + New comment
+
+
+
+ {% for comment in comments_list %}
+
+ {{ comment }}
+
+ {% empty %}
+ No comments yet.
+ {% endfor %}
+
+
+{% endblock %}
diff --git a/src/core/templates/core/post_create_form.html b/src/core/templates/core/post_create_form.html
index 6097592..bb33cbb 100644
--- a/src/core/templates/core/post_create_form.html
+++ b/src/core/templates/core/post_create_form.html
@@ -2,11 +2,11 @@
{% block content %}
+ New Post
-
{% endblock %}
diff --git a/src/core/templates/core/post_detail.html b/src/core/templates/core/post_detail.html
index 9aff092..4a0f36b 100644
--- a/src/core/templates/core/post_detail.html
+++ b/src/core/templates/core/post_detail.html
@@ -1,6 +1,11 @@
{% extends 'base.html' %}
+{% load static %}
{% load helpers %}
+{% block head %}
+
+{% endblock head %}
+
{% block content %}
{{ post.content|markdown|safe }}
+
{% endblock %}
diff --git a/src/core/templates/core/topic_detail.html b/src/core/templates/core/topic_detail.html
index 20a6fee..3337b7d 100644
--- a/src/core/templates/core/topic_detail.html
+++ b/src/core/templates/core/topic_detail.html
@@ -7,4 +7,13 @@
Delete
{{ topic }}
+
+
+ + New post
+ {% for post in topic.post_list.all %}
+
+ {% empty %}
+ No posts
+ {% endfor %}
+
{% endblock %}
diff --git a/src/core/templates/core/topic_list.html b/src/core/templates/core/topic_list.html
index fb969bc..c8cf46d 100644
--- a/src/core/templates/core/topic_list.html
+++ b/src/core/templates/core/topic_list.html
@@ -1,17 +1,22 @@
{% extends 'base.html' %}
{% block content %}
-Topics
-+ New topic
-
-
+
+ Topics
+ + New topic
+
{% for topic in topic_list %}
-
- {{ topic }}
-
+
+
+ {% for post in topic.post_list.all %}
+ - {{ post.title }}
+ {% empty %}
+ - No posts yet
+ {% endfor %}
+
{% empty %}
- No topics yet.
+ No topics yet.
{% endfor %}
-
-
+
+
{% endblock %}
diff --git a/src/core/urls.py b/src/core/urls.py
index 9353b88..f6258a9 100644
--- a/src/core/urls.py
+++ b/src/core/urls.py
@@ -42,11 +42,11 @@ urlpatterns = [
name='topic-list'
),
path(
- 'new/',
+ 'topics/new/',
views.TopicCreateView.as_view(),
name='topic-create'
),
- path('/', include([
+ path('topics//', include([
path(
'',
views.TopicDetailView.as_view(),
@@ -75,7 +75,7 @@ urlpatterns = [
views.PostCreateView.as_view(),
name='post-create'
),
- path('/', include([
+ path('/', include([
path(
'',
views.PostDetailView.as_view(),
diff --git a/src/core/views.py b/src/core/views.py
index 1b8a442..5a8da52 100644
--- a/src/core/views.py
+++ b/src/core/views.py
@@ -9,6 +9,7 @@ from django.views.generic.edit import (
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin
+from django.contrib.contenttypes.models import ContentType
from .models import Topic, Post, Comment
from .forms import PostForm, CommentCreateForm
@@ -60,16 +61,19 @@ class TopicCreateView(SuccessMessageMixin, CreateView):
class TopicDetailView(DetailView):
model = Topic
+ pk_url_kwarg = 'topic_pk'
class TopicUpdateView(SuccessMessageMixin, UpdateView):
model = Topic
+ pk_url_kwarg = 'topic_pk'
success_message = 'Topic saved.'
fields = '__all__'
class TopicDeleteView(SuccessMessageMixin, DeleteView):
model = Topic
+ pk_url_kwarg = 'topic_pk'
success_message = 'Topic deleted.'
success_url = reverse_lazy('topic-list')
@@ -84,18 +88,36 @@ class PostCreateView(SuccessMessageMixin, CreateView):
template_name_suffix = '_create_form'
fields = '__all__'
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+ context['topic'] = get_object_or_404(Topic, pk=self.kwargs['topic_pk'])
+ return context
+
class PostDetailView(DetailView):
model = Post
+ pk_url_kwarg = 'post_pk'
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ object_content_type = ContentType.objects.get_for_model(self.object).pk
+
+ context['comment_create_form'] = CommentCreateForm(initial={
+ 'content_type': object_content_type,
+ 'object_id': self.object.pk
+ })
+ return context
class PostUpdateView(SuccessMessageMixin, UpdateView):
model = Post
+ pk_url_kwarg = 'post_pk'
success_message = 'Post saved.'
fields = '__all__'
class PostDeleteView(SuccessMessageMixin, DeleteView):
model = Post
+ pk_url_kwarg = 'post_pk'
success_message = 'Post deleted.'
success_url = reverse_lazy('article-list')
Discussion
+ ++ {% endfor %} +
Add a comment
+ +