Django创建模型后跳转详情页报错:UUID无效问题排查
问题原因与解决方案
核心问题:redirect参数传递错误
你代码里的return redirect('daycare_profile_details', context)写法有误,Django的redirect函数在指定视图名称后,需要直接传递位置参数或关键字参数,而非打包成字典传入。这种错误写法导致详情页视图收到的pk是整个字典对象,而非有效的UUID字符串,因此触发“UUID无效”错误。
修复步骤
修正redirect的参数传递方式
把传递字典的逻辑改成直接传关键字参数:return redirect('daycare_profile_details', pk=new_id) # 也可以用位置参数,只要和URL配置里的参数顺序匹配 # return redirect('daycare_profile_details', new_id)确认save()后的实例状态
form.save()执行完成后,form.instance已经是存入数据库的对象,它的pk(如果是UUID类型)已经生成,不需要重新查询数据库。你可以打印new_daycare.pk验证,结果应该是一个有效的UUID对象,转成字符串后可直接用于跳转。
完整修正后的create_daycare_profile视图
def create_daycare_profile(request): form = DayCareProfileForm if request.method == 'POST': form = DayCareProfileForm(request.POST) if form.is_valid(): form.save() new_daycare = form.instance new_id = str(new_daycare.pk) # 直接传递关键字参数pk return redirect('daycare_profile_details', pk=new_id) context = {'form': form} return render(request, 'daycare_profile/create_daycare_profile.html', context)
额外检查点
- 确认URL配置中
daycare_profile_details的规则正确,例如:
如果URL里用了path('daycare/<uuid:pk>/', daycare_profile_details, name='daycare_profile_details')<uuid:pk>,那么传递的new_id必须是合法的UUID字符串,str(new_daycare.pk)刚好满足这个要求。
内容的提问来源于stack exchange,提问作者Xinyu Yang
相关产品推荐
相关产品推荐

