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')
额外注意事项
- 确保数据库中已存在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')
- 务必修正views.py中的forms导入:原代码
import forms可能导入Django内置的forms模块,而非你自定义的forms.py,改为from . import forms可避免潜在错误。
内容的提问来源于stack exchange,提问作者Coderfek
相关产品推荐
相关产品推荐

