Allow commenting on posts

This commit is contained in:
Maximilian Friedersdorff 2022-07-05 21:27:56 +01:00
parent f267d9d2e7
commit 3db4514f6d
3 changed files with 22 additions and 12 deletions

View file

@ -4,5 +4,4 @@ from . import views
urlpatterns = [
path("post/<int:pk>", views.PostDetailView.as_view()),
path("post/<int:pk>/comments", views.AddCommentView.as_view()),
]

View file

@ -1,17 +1,29 @@
from django.views.generic import DetailView
from django.views.generic import DetailView, CreateView
from django.views.generic.edit import ModelFormMixin
from django.forms import modelform_factory
from django.http import HttpResponseRedirect
# Create your views here.
from .models import Post, Comment
class PostDetailView(DetailView):
class PostDetailView(DetailView, ModelFormMixin):
model = Post
form_class = modelform_factory(Comment, fields=("comment",))
success_url = "#"
def get_context_data(self, **kwargs):
context = {
"add_comment_form": modelform_factory(Comment, fields=("comment",)),
**kwargs,
}
return super().get_context_data(**context)
def form_valid(self, form):
comment = form.save(commit=False)
comment.post = self.object
comment.user = self.request.user
comment.save()
return HttpResponseRedirect(self.get_success_url())
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.form_class(request.POST)
if form.is_valid:
return self.form_valid(form)
else:
return self.form_invalid(form)

View file

@ -11,10 +11,9 @@
<li>{{ comment.user }} - {{ comment.comment }}</li>
{% endfor %}
</ul>
<form action="{% url 'posts:add_comment' object.pk%}"
method="post">
<form action="" method="post">
{% csrf_token %}
{{ add_comment_form }}
{{ form }}
<input type="submit", value="Post">
</form>
</body>