Django评论提交后跳转至对应帖子页面的实现求助
解决Django评论提交后跳转至对应帖子详情页的问题
你只需修改AddReviewView中的跳转配置,替换为动态获取目标地址的方法即可,具体操作如下:
修改views.py中的AddReviewView类
删除原有的success_url = reverse_lazy('blog-home'),添加get_success_url方法:
class AddReviewView(CreateView): model = Review form_class = ReviewForm template_name = 'blog/add_review.html' def form_valid(self, form): form.instance.post_id = self.kwargs['pk'] return super().form_valid(form) def get_success_url(self): # 通过刚创建的评论实例关联到对应帖子,调用其已定义的详情页地址方法 return self.object.post.get_absolute_url()
原理说明
- 静态的
success_url无法动态获取当前评论所属的帖子ID,而get_success_url方法会在评论实例保存完成后执行,此时可通过self.object访问到刚创建的Review对象。 - 借助Review模型与Post的外键关联
self.object.post,直接调用Post模型中已定义的get_absolute_url方法,即可得到对应帖子的详情页地址。
可选实现方式
若不想依赖Post的get_absolute_url,也可直接通过reverse生成URL:
def get_success_url(self): from django.urls import reverse return reverse('post-detail', kwargs={'pk': self.object.post.pk})
内容的提问来源于stack exchange,提问作者pyguy34
相关产品推荐
相关产品推荐

