详解Django的 get_object_or_404() 函数:获取模型对象或返回 404 错误

  • Post category:Python

get_object_or_404()是Django提供的一个常用函数,该函数的主要作用是在数据库中查找指定模型的一条记录,如果找到了则返回该记录,如果找不到则抛出Http404错误。

使用该函数可以方便地实现下面的功能:

  • 根据指定的模型的主键或唯一标识查找该模型的一条记录;
  • 如果找到了该记录,则返回该记录,并生成一个HTTP响应对象;
  • 如果没有找到该记录,则抛出Http404错误。

下面是get_object_or_404()函数的签名:

def get_object_or_404(klass, *args, **kwargs):
    # implementation

其中,klass指定要查找的模型类,args是查询条件,kwargs是用于指定查询条件的关键字参数。

下面是两个使用get_object_or_404()函数的实例说明:

示例1:

假设有一个名为“Book”的模型类,它有一个名为“id”的主键字段,该字段是一个整数。现在需要根据id查找该模型的一条记录,并在找到该记录时返回该记录,否则抛出Http404错误。可以使用下面的代码实现:

from django.shortcuts import get_object_or_404
from myapp.models import Book

def book_detail(request, book_id):
    book = get_object_or_404(Book, id=book_id)
    return render(request, 'book_detail.html', {'book': book})

在上面的代码中,我们首先导入了get_object_or_404()函数和模型类Book。然后在book_detail函数中,我们首先通过传递的book_id参数构造了一个关键字参数{‘id’: book_id},然后调用get_object_or_404()函数查找该模型的一条记录。如果找到了该记录,该函数将返回该记录,并将其赋值给book变量;否则,该函数将抛出Http404错误。最后,我们将查找到的书籍信息传递给模板文件book_detail.html。

示例2:

假设有一个名为“Article”的模型类,它有一个名为“slug”的唯一字段,该字段是一个字符串。现在需要根据slug查找该模型的一条记录,并在找到该记录时返回该记录,否则抛出Http404错误。可以使用下面的代码实现:

from django.shortcuts import get_object_or_404
from myapp.models import Article

def article_detail(request, slug):
    article = get_object_or_404(Article, slug=slug)
    return render(request, 'article_detail.html', {'article': article})

在上面的代码中,我们首先导入了get_object_or_404()函数和模型类Article。然后在article_detail函数中,我们首先通过传递的slug参数构造了一个关键字参数{‘slug’: slug},然后调用get_object_or_404()函数查找该模型的一条记录。如果找到了该记录,该函数将返回该记录,并将其赋值给article变量;否则,该函数将抛出Http404错误。最后,我们将查找到的文章信息传递给模板文件article_detail.html。

以上是get_object_or_404()函数的使用方法和两个实例说明。