Как расширить класс bassed view
Я создал class-based-view, который показывает содержимое поста. Я также добавил возможность делать комментарии, но форма комментария не работает.
views.py
class PostDetailView(DetailView):
model=Post
template_name='blogdetail.html'
pk_url_kwarg='id'
def comments(request):
comments=post.comments.all()
new_comment=None
if request.method=="POST":
comment_form=CommentForm(data=request.POST)
if comment_form.is_valid():
new_comment=comment_form.save(committ=False)
new_comment.post=post
new_comment.save()
else:
comment_form=CommentForm()
return render(request, 'allblogs.html', {'comments':comments, 'comment_form':comment_form,
'new_comment':new_comment})
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model=Comment
fields=['post','body']
blogdetail.html
{% extends 'base.html' %}
{% block content %}
<h1>{{post.title}}</h1>
<p>{{post.created_on}}</p>
<p><a href="{% url 'userpage' post.author.username %}"></a>:{{post.author}}</p>
<p>{{post.text}}</p>
<form>
{{comment_form.as_p}}
<p><input type="submit" value="add"></p>
{% csrf_token %}
</form>
{% endblock content %}
Базовые представления классов не работают таким образом. Если вы посмотрите на свой класс, вы не вызвали функцию комментария. Я предлагаю вам посмотреть на эту страницу. Кроме того, для создания URL для вашего автора, я предлагаю вам использовать get_absolute_url в вашей модели и использовать его в вашем шаблоне следующим образом: {{ author.get_absolute_url }}
Надеемся, что этот ответ помог вам.