You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:表单提交成功后重定向至带PK的前一页实现问题

问题:表单提交后重定向回带PK的原页面

我正在实现一个表单,需要在提交成功后将用户重定向到带有主键(PK)的前一页。示例原页面地址:http://127.0.0.1:8000/object/update/8/

首次尝试代码

def get_success_url(self, **kwargs):
    return reverse_lazy('task_update:update', kwargs={'id': self.object.id})

当前尝试及错误

我尝试让表单加载时携带原页面的PK(表单本身不需要PK,示例表单地址:http://127.0.0.1:8000/tag/create/8/),并在get_success_url中用该PK生成原页面地址,代码如下:

def get_success_url(self, **kwargs):
    return reverse_lazy('task_update', self.kwargs.get('pk'))

但出现以下错误:

包含的URLconf '8'中似乎没有任何模式。如果您在文件中看到带有有效模式的'urlpatterns'变量,那么问题可能是由循环导入引起的。

需求目标

用户从http://127.0.0.1:8000/object/update/8/跳转至标签创建页,提交表单后需返回原页面。


解决方案

你的错误出在reverse_lazy的调用方式上:第二个参数如果是URL参数,必须通过kwargs关键字参数传递,不能直接传值。正确写法如下:

def get_success_url(self, **kwargs):
    # 确保URL名称与你的URL配置一致,比如'task_update:update'对应原页面的路由
    return reverse_lazy('task_update:update', kwargs={'pk': self.kwargs.get('pk')})

同时要确认你的URL配置中,task_update:update对应的路由是接受pk参数的,示例配置如下:

# urls.py 示例
path('object/update/<int:pk>/', UpdateTaskView.as_view(), name='update'),

如果原页面路由用的参数名是id而非pk,把kwargs={'pk': ...}改成kwargs={'id': ...}即可。

另外还有一种更通用的方案:跳转表单页时,把原页面URL作为next参数传递(比如跳转链接加?next=/object/update/8/),然后在get_success_url中读取该参数:

def get_success_url(self):
    next_url = self.request.GET.get('next')
    if next_url:
        return next_url
    # 兜底的默认重定向地址
    return reverse_lazy('some_default_page')

这种方式无需在URL中携带PK,适配性更强,适合原页面URL结构可能变化的场景。


内容的提问来源于stack exchange,提问作者Wamz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:05:28