Django重定向到已创建视图(pk)

2024-09-30 10:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

填写完表格后,我试图重定向到已创建的帖子。我尝试跟踪Django redirect to created post after form,但遇到了此错误

TypeError at /inquiry/
inquiry() missing 1 required positional argument: 'pk'
def inquiry(request,pk):

    form = RescueeForm()

    if request.method == 'POST':
        form = RescueeForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect ('rescuee', form.pk)

    context = {
        'form' : form
    }

    return render(request, "inquiry_page.html", context)

urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('inquiry/', views.inquiry, name='inquiry'),
    path('rescuee/<int:pk>', views.rescueeview, name='rescuee'),
]

编辑:添加逗号


Tags: pathnameformindexreturnifrequestcontext
3条回答

在您发布的代码片段中,对redirect的调用中似乎缺少一个逗号。另外,正如其他人所指出的,您正在将一个pk参数传递给不使用的inquiry,这导致了错误。一旦修复了这个问题,您就指出form.pk有一个属性错误,这意味着form没有一个名为pk的属性。也许你的意思是form.id

试一试

def inquiry(request):

    form = RescueeForm()

    if request.method == 'POST':
        form = RescueeForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect('rescuee', form.id)

    context = {
        'form' : form
    }

    return render(request, "inquiry_page.html", context)

或者,如果您需要表单创建的模型的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)

我看你忘了在{}和{}之间有一个{}: return redirect ('rescuee', form.pk)

您的inquiry视图接受一个参数pk。 在urls.py中,查询路径不采用pk参数。 更改urls.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'),
]

当您的url不接受pk的任何值时,为什么在查询视图中使用pk

我认为这就是解决方案,因为您没有在视图代码中使用pk。试试看:

def inquiry(request):
    form = RescueeForm()
    #other codes

Note: After getting your reply, I am assuming there is a problem in form validation. I will suggest you to try this code :

# 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)

相关问题 更多 >

    热门问题