Python 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

我想尝试Django框架,并尝试了博客应用程序教程。我试图添加一个评论功能。我知道这些问题已经被问了好几次了,但都没有找到解决问题的办法

我得到了以下错误:
没有与给定查询匹配的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 %}