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

Django单表单实现多页面跳转失败求助

问题分析与解决方案

你的代码核心问题是表单验证后获取的category是Category模型实例,不是字符串,所以和字符串'Link'/'Emails'/'Text'的比较永远不成立,导致无法进入重定向分支,最终执行函数末尾的render回到原页面。

具体错误点

在pdfUploadView中:

category = form.cleaned_data['category']
# 这里的category是Category模型对象,不是字符串
if category == 'Link':  # 永远为False
    return redirect('link')

修复方案

方案1:比较Category实例的name属性

修改views.py中的判断逻辑,使用实例的name字段进行比较:

def pdfUploadView(request):
    if request.method == 'POST':
        # 修正forms导入(避免导入Django内置forms模块)
        from . import forms
        form = forms.UploadPdfForm(request.POST, request.FILES)
        if form.is_valid():
            category = form.cleaned_data['category']
            form.save()
            messages.success(request, "File uploaded successfully!!")
            
            # 比较category的name属性
            if category.name == 'Link':
                return redirect('link')
            elif category.name == 'Emails':
                return redirect('emails')
            elif category.name == 'Text':
                return redirect('text')
    else:
        from . import forms
        form = forms.UploadPdfForm()
    
    return render(request, 'UploadPdf.html', {'form':form})

方案2:使用slug字段比较(更可靠)

slug由AutoSlugField自动生成,格式统一(通常为小写),比name更不容易出现大小写或拼写错误问题:

if category.slug == 'link':
    return redirect('link')
elif category.slug == 'emails':
    return redirect('emails')
elif category.slug == 'text':
    return redirect('text')

额外注意事项

  1. 确保数据库中已存在name为'Link'、'Emails'、'Text'的Category记录,否则category可能为None(模型中category允许为null),需增加判断避免报错:
if category:
    if category.name == 'Link':
        return redirect('link')
    # ...其他判断
else:
    messages.error(request, "请选择分类")
    return redirect('UploadPdf')
  1. 务必修正views.py中的forms导入:原代码import forms可能导入Django内置的forms模块,而非你自定义的forms.py,改为from . import forms可避免潜在错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:47:06