【问题标题】:Method Not Allowed (POST)不允许的方法 (POST)
【发布时间】:2018-12-13 15:13:16
【问题描述】:

我试图让用户按下提交并创建另一个评论帖子,但我在点击帖子时收到“不允许的方法(POST):”

class PostDetailView(DetailView):
model = Post
 def get_context_data(self, **kwargs):
    # post = Post.objects.filter(id = self.kwargs['pk'])
    post = get_object_or_404(Post, id=self.kwargs['pk'])
    comments = Comment.objects.filter(post=post).order_by('-id')
    is_liked = False
    if post.likes.filter(id=self.request.user.id).exists():
        is_liked = True

    context = super().get_context_data(**kwargs)

    if self.request.method == 'POST':
        comment_form = CommentForm(self.request.POST or None)
        if comment_form.is_valid():
            content = self.request.POST.get('content')
            comment = Comment.objects.create(post=post, user=self.request.user, content=content)
            comment.save()
            return HttpResponseRedirect(post.get_absolute_url())
    else:
        comment_form = CommentForm()

    context['is_liked'] = is_liked
    context['total_likes'] = post.total_likes()
    context['comments'] = comments
    context['comment_form'] = comment_form
    return context

对于模板:

<form method="post">
{% csrf_token %}
{{ comment_form.as_p}}
<input type="submit" value="Submit" class="btn btn-outline-success">

【问题讨论】:

  • 您需要显示视图类的其余部分,而不仅仅是 get_context_data 方法。它是定义一个post 方法,还是从一个类继承?
  • 但请注意,您当然不应该在 get_context_data 方法中做处理表单之类的事情。那是为了获取上下文数据。
  • 我已更改我的问题以包括整个班级。您将如何处理表单?
  • 您应该使用表单视图 - 在本例中为 CreateView。您的代码根本不起作用,您只能从该方法返回 context,而不是例如重定向。

标签: django django-forms django-views


【解决方案1】:

如您所见here,您不能在DetailView 中使用POST 方法。仅支持get

如果你想使用POST,你应该使用formview或者继承formmixin。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2020-06-17
    • 2014-05-23
    • 1970-01-01
    • 2021-02-09
    • 2020-11-13
    • 2020-06-18
    • 2017-09-17
    • 2021-07-07
    相关资源
    最近更新 更多