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

Django表单提交查询Dinucleotides出现DoesNotExist错误求助

问题分析

你遇到的DoesNotExist错误有两个核心原因:

  1. 查询值硬编码错误:你在查询时写死了SSRtype='Motiff',这意味着不管用户提交什么内容,程序都会去查找SSRtype等于字符串'Motiff'的记录,而不是用户输入的实际值。正确的做法应该是用表单提交的Motiff参数值作为查询条件。
  2. 未处理查询无结果的情况:get()方法在数据库中找不到匹配记录时会直接抛出DoesNotExist异常,必须提前处理这种场景,避免程序崩溃。
修正方案

针对这两个问题,你可以做以下调整:

  • 替换硬编码的查询值,使用用户提交的表单数据request.POST.get('Motiff')(用get()可以避免键不存在时抛出KeyError)
  • 用两种方式处理无结果的情况:
    方式一:使用filter()替代get(),然后判断结果是否存在
    方式二:保留get(),但用try-except捕获DoesNotExist异常
修正后的views.py代码
from django.shortcuts import render
from django.views.generic import TemplateView, ListView, DetailView
from ssr.models import Dinucleotides
from ssr.forms import InputForm
from django.core.exceptions import DoesNotExist  # 导入异常类

# Create your views here.
def homepage(request):
    return render(request,'index.html')

def searchpage(request):
    if request.method == 'GET':
        form = InputForm()
        return render(request,'search.html',{'form':form})
    else:
        print(request.POST)
        motiff_value = request.POST.get('Motiff')  # 获取用户提交的实际值
        if motiff_value:
            # 方式一:用filter处理无结果情况
            obj_list = Dinucleotides.objects.filter(SSRtype=motiff_value)
            if obj_list.exists():
                obj1 = obj_list.first()
                return render(request,'result.html',{'obj1':obj1})
            else:
                # 无匹配记录时返回提示
                return render(request,'search.html',{'form':InputForm(), 'error': '未找到匹配的记录'})
            
            # 方式二:用try-except捕获异常(二选一即可)
            # try:
            #     obj1 = Dinucleotides.objects.get(SSRtype=motiff_value)
            #     return render(request,'result.html',{'obj1':obj1})
            # except DoesNotExist:
            #     return render(request,'search.html',{'form':InputForm(), 'error': '未找到匹配的记录'})
        else:
            # 处理用户未输入Motiff的情况
            return render(request,'search.html',{'form':InputForm(), 'error': '请输入Motiff内容'})
额外建议
  • 建议使用Django表单的cleaned_data来获取用户输入,而不是直接访问request.POST,这样可以利用表单的验证功能,比如:
    form = InputForm(request.POST)
    if form.is_valid():
        motiff_value = form.cleaned_data.get('Motiff')
        # 后续查询逻辑
    
  • 在模板中可以添加错误提示的展示,比如在search.html中:
    {% if error %}
        <p style="color:red;">{{ error }}</p>
    {% endif %}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:30:56