Python中Django使用DeleteView删除主题回复后,如何让success_url返回当前主题页面?

class Delete_Reply(DeleteView):
model = Reply
template_name = ‘bbs/delete_reply.html’
success_url = reverse_lazy(‘bbs:index’)

现在删了一个回复只能返回首页
如果 reverse_lazy(‘bbs:bbs_detail’, pk = id)
不知道这个 pk id 怎么传进来?
Python中Django使用DeleteView删除主题回复后,如何让success_url返回当前主题页面?

5 回复
# 在DeleteView中重写get_success_url方法
from django.urls import reverse
from django.views.generic import DeleteView

class ReplyDeleteView(DeleteView):
    model = Reply
    template_name = 'reply_confirm_delete.html'
    
    def get_success_url(self):
        # 获取当前回复所属的主题ID
        topic_id = self.object.topic.id
        # 构建返回主题页面的URL
        return reverse('topic_detail', kwargs={'pk': topic_id})

或者用更简洁的方式:

class ReplyDeleteView(DeleteView):
    model = Reply
    
    def get_success_url(self):
        # 直接使用object的topic_id字段
        return reverse('topic_detail', kwargs={'pk': self.object.topic_id})

如果需要在URL中包含其他参数:

def get_success_url(self):
    return reverse('topic_detail', args=[self.object.topic.id])

关键点:

  1. get_success_url方法中通过self.object访问要删除的对象
  2. 从回复对象中获取关联的主题ID
  3. 使用reverse()函数生成主题详情页的URL

确保你的URL配置中有名为topic_detail的路径,并且接受主题ID作为参数。

总结:重写DeleteView的get_success_url方法,从删除对象中提取主题ID并返回对应URL。


这个 self 参数放在哪?

不要在类上,要在对象方法里获取,参考 get_success_url()

reverse_lazy(‘bbs:bbs_detail’, kwargs={‘pk’: id} )

这种情况建议直接在当前页用 ajax 直接 post 回复的 id 到后端删除。

回到顶部