问题描述
我目前使用基于功能的视图来让用户在帖子上发表评论,但我正在尝试将其转换为基于类的视图
功能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)