Python Django重定向到已创建视图(pk)
填写完表格后,我试图重定向到已创建的帖子。我尝试了以下操作,但遇到了此错误Python Django重定向到已创建视图(pk),python,django,redirect,django-views,Python,Django,Redirect,Django Views,填写完表格后,我试图重定向到已创建的帖子。我尝试了以下操作,但遇到了此错误 TypeError at /inquiry/ inquiry() missing 1 required positional argument: 'pk' url.py urlpatterns = [ path('', views.index, name='index'), path('inquiry/', views.inquiry, name='inquiry'), path('rescue
TypeError at /inquiry/
inquiry() missing 1 required positional argument: 'pk'
url.py
urlpatterns = [
path('', views.index, name='index'),
path('inquiry/', views.inquiry, name='inquiry'),
path('rescuee/<int:pk>', views.rescueeview, name='rescuee'),
]
urlpatterns=[
路径(“”,views.index,name='index'),
路径('inquiry/',views.inquiry,name='inquiry'),
路径('sauree/',views.saureeview,name='sauree'),
]
编辑:在您发布的代码片段中添加了逗号,看起来对
重定向的调用中缺少了逗号。另外,正如其他人所指出的,您正在将一个pk
参数传递给inquiry
,而您没有使用该参数,这导致了错误。一旦解决了这个问题,您就指出form.pk
有一个属性错误,这意味着form
没有名为pk
的属性。也许你的意思是form.id
试一试
或者,如果您需要表单创建的模型的pk
,您可以尝试:
def inquiry(request):
form = RescueeForm()
if request.method == 'POST':
form = RescueeForm(request.POST)
if form.is_valid():
rescuee_instance = form.save()
return redirect('rescuee', rescuee_instance.pk)
context = {
'form' : form
}
return render(request, "inquiry_page.html", context)
我看到你忘了一个,
在RESCUE
和form.pk
之间:
返回重定向('rescuee',form.pk)
您的查询
视图接受一个参数pk
。
在您的url.py
中,您的查询路径不采用pk参数。
更改您的url.py
如下:
urlpatterns = [
path('', views.index, name='index'),
path('inquiry/<int:pk>', views.inquiry, name='inquiry'), # Inquiry view takes 'pk' argument
path('rescuee/<int:pk>', views.rescueeview, name='rescuee'),
]
urlpatterns=[
路径(“”,views.index,name='index'),
路径('inquiry/',views.inquiry,name='inquiry'),#inquiry视图接受'pk'参数
路径('sauree/',views.saureeview,name='sauree'),
]
当您的url不接受pk的任何值时,为什么在查询视图中使用pk
我认为这就是解决方案,因为您没有在视图代码中使用pk。试试看:
def inquiry(request):
form = RescueeForm()
#other codes
注意:在收到您的答复后,我假设您的回答有问题
表单验证。我建议您尝试以下代码:
# views.py
def inquiry(request):
form = RescueeForm()
if request.method == 'POST':
form = RescueeForm(request.POST)
if form.is_valid():
form.save()
return redirect ('rescuee', form.pk)
else:
print("validation error!")
context = {
'form' : form
}
return render(request, "inquiry_page.html", context)
实际上,我已经尝试过这个方法,但是在/inquiry/
'saureform'对象没有属性“pk”
@Romeo可能是表单验证有问题。尝试在“if form.is_valid():”函数中使用“return redirect('rescue',form.pk)”。我已经尝试过了,并且遇到了“inquiry”的索引html问题反向,没有找到任何参数。尝试了1个模式:[“查询/(?P[0-9]+)$”]
。因此,我尝试直接去索引/查询,但在/inquiry/'saureform'对象没有属性“pk”
@Romeo将form.pk
更改为form.id
,就像@AlonzoCathedral所说的那样。如果这是可行的,接受他的答案,但请投我的一票:)。我已经尝试了另一种解决方案,它奏效了!谢谢
def inquiry(request):
form = RescueeForm()
#other codes
# views.py
def inquiry(request):
form = RescueeForm()
if request.method == 'POST':
form = RescueeForm(request.POST)
if form.is_valid():
form.save()
return redirect ('rescuee', form.pk)
else:
print("validation error!")
context = {
'form' : form
}
return render(request, "inquiry_page.html", context)