Python Django博客应用程序,带有使用类视图的注释
我想尝试Django框架,并尝试了博客应用程序教程。我试图添加一个评论功能。我知道这些问题已经被问了好几次了,但都没有找到解决问题的办法 我得到了以下错误:Python Django博客应用程序,带有使用类视图的注释,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我想尝试Django框架,并尝试了博客应用程序教程。我试图添加一个评论功能。我知道这些问题已经被问了好几次了,但都没有找到解决问题的办法 我得到了以下错误: 没有与给定查询匹配的Post 谢谢你的帮助。以下是模型和所有: URL.py: path('', PostListView.as_view(), name='blog-home'), path('user/<str:username>/', UserPostListView.as_view(), name='us
没有与给定查询匹配的Post
谢谢你的帮助。以下是模型和所有:
URL.py:
path('', PostListView.as_view(), name='blog-home'),
path('user/<str:username>/', UserPostListView.as_view(), name='user-posts'),
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('post/new/', PostCreateView.as_view(), name='post-create'),
path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
path('post/<int:pk>/comment/', PostCommentView.as_view(), name='post-comment'),
path('about/', views.about, name='blog-about'),
]
forms.py:
class CommentForm(forms.ModelForm):
content=forms.Textarea()
class Meta:
model = Comment
fields=['content']
views.py:
class PostCommentView(LoginRequiredMixin, CreateView):
model = Comment
fields = ['content']
template_name = 'blog/comment_form.html'
success_url = '/'
def form_valid(self, form):
post = get_object_or_404(Post, id=self.kwargs.get('id'))
print(post.id)
form.instance.author = self.request.user
form.instance.post = post
return super().form_valid(form)
注释\u form.htlm:
{% extends "blog/base.html" %}
{% load crispy_forms_filters %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Comment tag</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Post comment</button>
</div>
</form>
<div class="border-top pt-3">
<small class="text-muted">
Abort the Comment? <a class="ml-2" href="{% url 'blog-home' %}">Back to Main Page</a>
</small>
</div>
</div>
{% endblock content %}
{%extends“blog/base.html”%}
{%load crispy_forms_filters%}
{%load crispy_forms_tags%}
{%block content%}
{%csrf_令牌%}
注释标签
{{form | crispy}}
发表评论
中止评论?
{%endblock内容%}
'id'是Django模型的标准主键,但不是使用ModelForm等创建的帖子的主键。
我想您需要在表单中添加一个隐藏字段“id”,以便将其与POST请求一起发送。
尝试在“get_object…”之前打印(self.kwargs.get('id')),您将看到“id”是否包含某些内容。尝试将这一行“path('post//comment/”,PostCommentView.as_view(),name='post-comment')”移到所有其他路径之上。这可能是由于无意中触发了错误的url端点。您是否可以显示出现在您面前的完整错误?这是一个404错误,表示:没有与给定查询匹配的Post。我猜错误来自于我尝试使用Post=get\u object\u或_404(Post,id=self.kwargs.get('id'))获取Post对象的form\u valid方法
{% extends "blog/base.html" %}
{% load crispy_forms_filters %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Comment tag</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Post comment</button>
</div>
</form>
<div class="border-top pt-3">
<small class="text-muted">
Abort the Comment? <a class="ml-2" href="{% url 'blog-home' %}">Back to Main Page</a>
</small>
</div>
</div>
{% endblock content %}