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

Django保存带外键的对象时触发Make模型DoesNotExist错误如何解决

问题原因

你的表单代码里下拉选项的value值末尾多了一个多余空格:

<option value="{{ item.name_text }} ">{{ item }}</option>

{{ item.name_text }}后面的空格会被一起提交到后台,导致你拿到的name_text1比数据库中存储的name_text多了末尾空格,自然objects.get()查询不到匹配的Make对象,抛出DoesNotExist错误。

修复方案

  1. 首先修改HTML代码,去掉option标签value属性里的多余空格:
<option value="{{ item.name_text }}">{{ item }}</option>

如果怕后续还有类似空格问题,可以在查询时对提交的内容去除首尾空白:

name_text1 = request.POST.get('make').strip()
make = Make.objects.get(name_text = name_text1)

其他注意事项

  1. 你之前测试Make.objects.filter(name_text = "some value")看似能运行,是因为filter返回的是查询集,不能直接赋值给外键字段,否则会报错,必须取查询集中的单个对象:
make = Make.objects.filter(name_text = name_text1).first()
  1. 更稳妥的方案是下拉选项的value直接传Make的主键id,避免出现同名Make匹配错误的问题:
    修改HTML部分:
<option value="{{ item.id }}">{{ item }}</option>

对应修改视图查询逻辑:

make_id = request.POST.get('make')
make = Make.objects.get(id=make_id)
  1. 建议配合get_object_or_404方法查询,避免非法提交导致程序直接抛出500错误:
from django.shortcuts import get_object_or_404
make = get_object_or_404(Make, id=make_id)
  1. 后续开发尽量使用Django自带的Form或ModelForm处理表单提交,自动完成数据校验,减少手动写表单出现的低级错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:05