Django中如何在get_success_url传递关联项目的变量参数?
Django DeleteView get_success_url传递关联外键参数解决方案
你的问题出在CenterDelete视图的get_success_url方法中,没有正确获取待删除Center关联的ProjectID,且参数格式不符合reverse要求。修改方法如下:
修改CenterDelete视图代码
class CenterDelete(DeleteView): model = Center template_name = 'Procure/center_delete.html' def get_success_url(self): # 获取当前待删除的Center实例 current_center = self.object # 提取关联Project的ID project_id = current_center.Project.id # 生成带项目ID的跳转URL,args需传入元组格式参数 return reverse('centers_sys', args=(project_id,))
关键说明
- 获取当前实例:Django的
DeleteView会自动将待操作的模型实例赋值给self.object,通过它可以直接访问关联的Project对象。 - 参数格式要求:
reverse的args参数必须是可迭代对象(如元组),所以单个参数要写成(project_id,)(末尾加逗号确保是元组)。 - 避免硬编码:之前写死
args='2'的方式不具备通用性,通过实例获取关联ID才能适配所有项目场景。
验证逻辑
删除操作完成后,生成的URL会匹配路由path('centers/<int:pk>', ..., name='centers_sys'),其中pk就是关联的ProjectID,CentersListViewSys的get_queryset方法会通过self.kwargs['pk']拿到该ID,正确过滤对应项目下的Center列表。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

