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)