python - Django objects.get() 函数不起作用,但 objects.filter().first() 起作用
问题描述
当我查找用户时
User.objects.get(username=username)
它显示错误
用户匹配查询不存在
但它适用于User.objects.filter(username=username).first()
为什么会这样?
解决方案
两者不等价。.get(…)
[Django-doc]会在两种情况下引发异常:
User
当给定没有时username
;和- 当给定的 s有多个 时,尽管在这里这是不可能的,因为是一个字段。
User
username
username
unique=True
.first(…)
另一方面,[Django-doc]不会引发异常。如果没有返回记录,它将返回None
。如果有多个匹配的记录,它将简单地返回第一个。
然而,静默传递错误通常不是一个好主意。如果您期望用户,使用.first()
将导致None
,但这可能意味着视图中稍后期望User
对象的逻辑将引发错误或出错。在视图中get_object_or_404
,[Django-doc]通常用于Http404
在不存在对象的情况下引发 a,因此这意味着视图将以 HTTP 404 响应进行响应。
推荐阅读
- linux - 用于检查 jdk 版本是否高于 1.8 的 Shell 脚本
- windows - EMGU CV 中的 VideoWriter 对象可以在 Windows 控制台应用程序中使用吗?
- excel - 设置值时Textframe2.Orientation错误
- python - 在 Spyder 中安装包,例如 geopandas - “没有名为 XXXXXXX 的模块”
- csv - SAPGUI(LoadRunner)中的表问题
- excel - Excel:根据最小/最大列有条件地添加图标
- ruby-on-rails - Rails 中的 Throttle Sidekiq 工作
- python - 为什么在 Python 中从不同路径调用类时 __class__ 会有所不同?
- javascript - 如何使立方体围绕其一侧旋转?
- python - 无法将关键字“用户”解析为字段 - django 错误