Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?
Posted
技术标签:
【中文标题】Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?【英文标题】:What is the exact difference between get_list_or_404 and get_object_or_404 in Django?Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是什么? 【发布时间】:2020-09-14 11:49:17 【问题描述】:我对 Django 中的 get_list_or_404 和 get_object_or_404 之间的区别感到有些困惑。我正在使用对象一来获取特定用户的帖子,但想了解更多关于如何使用 get_list_or_404 的信息。
【问题讨论】:
注意:get_list_or_404 是一个未被充分利用的 API 有充分的理由:它将已经是一个有序序列变成一个不再可以查询的可写有序序列。很少有需要这样做的用例。如果您的下一步是遍历列表并呈现输出或传递给模板,那么您不需要。 【参考方案1】:def get_object_or_404(klass, *args, **kwargs):
Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.
is shortcut for
try:
return Model.objects.get(pk=...)
except Model.DoesNotExist:
raise Http404()
def get_list_or_404(klass, *args, **kwargs):
Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.
is shortcut for
obj_list = list(Model.objects.filter(title=...))
if not obj_list:
raise Http404()
return obj_list
作为 get_object_or_404 快捷方式调用 get(),如果找到多个对象,则会引发 MultipleObjectsReturned 异常。
由于 get_list_or_404 快捷方式返回一个列表,除非返回的列表不为空,否则不会引发此类异常。
【讨论】:
以上是关于Django 中的 get_list_or_404 和 get_object_or_404 之间的确切区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章