在基于 Django class 的视图中获取 post 实例

Getting the post instance in Django class based views

我目前使用基于函数的视图让用户对帖子发表评论,但我正在尝试将其转换为基于 class 的视图

函数views.py

def comment(request, pk):  
  form = CommentForm(request.POST)
  # Post instance
  post_instance = get_object_or_404(Post, pk=pk)

  if request.method == 'POST':
    if form.is_valid:
      obj = form.save(commit=False)
      obj.commenter = request.user
      obj.post = post_instance
      obj.save()
      return redirect('/')
  else:
    messages.error(request, 'Comment Failed')
    
  return render(request, 'comment.html', {'form': form})

Class views.py

class CommentView(FormView):
  template_name = 'comment.html'
  form_class = CommentForm
  success_url = '/'

  def get_object(self):
    pk = self.kwargs.get('pk')
    post_instance = get_object_or_404(Post, pk=pk)
    return post_instance

  def form_valid(self, form):
    obj = form.save(commit=False)
    obj.commenter = self.request.user
    obj.post = post_instance
    obj.save()
    return super().form_valid(form)

我正在尝试实现相同的逻辑来保存评论,但我收到错误消息:名称 'post_instance' 未定义

get_object() 正在返回 'post_instance' 变量,但我无法访问它。 你们能告诉我我哪里做错了吗,在此先感谢!

你可以试试:

class CommentView(FormView):
  template_name = 'comment.html'
  form_class = CommentForm
  success_url = '/'

  def get_object(self):
    pk = self.kwargs.get('pk')
    post_instance = get_object_or_404(Post, pk=pk)
    return post_instance

  def form_valid(self, form):
    obj = form.save(commit=False)
    obj.commenter = self.request.user
    obj.post = self.get_object()
    obj.save()
    return super().form_valid(form)