Django中使用RedirectView重定向时如何跳过URL中的pk参数
解决RedirectView重定向时的NoReverseMatch错误
错误原因
你的DailyRecordDeleteView继承自RedirectView,默认会把当前URL中的kwargs(比如pk=7)传递给reverse函数去解析目标URLbusiness:daily_records。但daily_records对应的URL路径是不带pk参数的,所以反向解析时找不到匹配的路由,抛出NoReverseMatch错误。
修复方案
修改DailyRecordDeleteView的get_redirect_url方法,先完成删除逻辑,再手动生成不带参数的列表页URL:
class DailyRecordDeleteView(RequiredBasicDetailsMixin, RedirectView): def get_redirect_url(self, *args, **kwargs): # 1. 获取并删除目标记录 DailyRecord.objects.filter(pk=kwargs['pk']).delete() # 2. 返回列表页URL,不传递任何参数 return reverse('business:daily_records')
补充说明
- 用
filter而非get是为了避免记录不存在时抛出异常,如果你确认请求的pk一定对应存在的记录,也可以用DailyRecord.objects.get(pk=kwargs['pk']).delete()。 - 不需要再设置
pattern_name,因为我们直接返回了生成好的URL。
验证修改
修改后点击删除按钮,系统会先删除对应pk的DailyRecord记录,然后成功重定向到不带pk参数的列表页/business/daily-records/。
内容的提问来源于stack exchange,提问作者Kaushik Tank
相关产品推荐
相关产品推荐

