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 = [ urlpatterns = [
path("post/<int:pk>", views.PostDetailView.as_view()), 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.forms import modelform_factory
from django.http import HttpResponseRedirect
# Create your views here. # Create your views here.
from .models import Post, Comment from .models import Post, Comment
class PostDetailView(DetailView): class PostDetailView(DetailView, ModelFormMixin):
model = Post model = Post
form_class = modelform_factory(Comment, fields=("comment",))
success_url = "#"
def get_context_data(self, **kwargs): def form_valid(self, form):
context = { comment = form.save(commit=False)
"add_comment_form": modelform_factory(Comment, fields=("comment",)), comment.post = self.object
**kwargs, comment.user = self.request.user
} comment.save()
return super().get_context_data(**context) 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> <li>{{ comment.user }} - {{ comment.comment }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
<form action="{% url 'posts:add_comment' object.pk%}" <form action="" method="post">
method="post">
{% csrf_token %} {% csrf_token %}
{{ add_comment_form }} {{ form }}
<input type="submit", value="Post"> <input type="submit", value="Post">
</form> </form>
</body> </body>