详解Django的 get_object() 函数:获取视图所处理的对象

  • Post category:Python

get_object()是Django框架中用于根据给定的筛选条件获取单个对象的函数,它的作用是获取数据库中符合某些条件的对象,如果找到多个对象或找不到任何对象,函数将抛出异常。下面对其详细进行讲解。

函数签名

get_object_or_404(klass, *args, **kwargs) 或 get_object_or_none(klass, *args, **kwargs)

其中, klass 是查询的模型类名, *args**kwargs 是一个可选的查询参数,用于指定需要查询的对象和筛选条件。

使用方法说明

使用 get_object_or_404() 函数可以方便地获取数据库中一个指定的对象,同时在找不到指定对象时,还能够自动抛出 Http404 异常,返回 404 错误页面提醒用户。

使用 get_object_or_none() 函数可以方便地获取数据库中一个指定的对象,如果找不到指定的对象,则返回 None。

以下是一个实例,假设我们有一个名为Book的书籍模型,它有以下属性:书名(title),作者(author),出版社(publisher)和出版时间(pub_date)。

获取一本指定书籍

from django.shortcuts import get_object_or_404
from .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})

上面的代码实现了获取 ID 为 book_id 的书籍对象,并将其传递给 book_detail.html 模板。如果找不到该书籍对象,将自动抛出 Http404 异常,返回 404 错误页面。

获取一位指定作者的书籍

from django.shortcuts import get_object_or_404
from .models import Book

def author_books(request, author_id):
    author_books = Book.objects.filter(author=author_id)
    return render(request, 'author_books.html', {'books': author_books})

上面的代码实现了获取作者 ID 为 author_id 的所有书籍,并将它们传递给 author_books.html 模板。如果找不到任何书籍,将返回空白页面。

总结

Django get_object_or_404()get_object_or_none() 函数的使用方法都相对简单,通过传递参数查询数据库可以方便地获取所需对象,同时提供了便捷的异常处理方式,帮助我们更好的进行开发。