首页 > 解决方案 > Django objects.get() 函数不起作用,但 objects.filter().first() 起作用

问题描述

当我查找用户时

User.objects.get(username=username)

它显示错误

用户匹配查询不存在

但它适用于User.objects.filter(username=username).first()

为什么会这样?

标签: pythondjangobackendweb-development-server

解决方案


两者不等价。.get(…)[Django-doc]会在两种情况下引发异常:

  1. User当给定没有时username;和
  2. 当给定的 s有多个 时,尽管在这里这是不可能的,因为是一个字段。Userusernameusernameunique=True

.first(…)另一方面,[Django-doc]不会引发异常。如果没有返回记录,它将返回None。如果有多个匹配的记录,它将简单地返回第一个。

然而,静默传递错误通常不是一个好主意。如果您期望用户,使用.first()将导致None,但这可能意味着视图中稍后期望User对象的逻辑将引发错误或出错。在视图中get_object_or_404,[Django-doc]通常用于Http404在不存在对象的情况下引发 a,因此这意味着视图将以 HTTP 404 响应进行响应。


推荐阅读