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

  • Post category:Python

get_object_or_404()是Django框架中的一个常用函数,其作用是在数据库中查找一个对象,如果对象不存在,则返回404错误(页面不存在)。

使用方法:

1.在views.py中导入get_object_or_404函数

from django.shortcuts import render, get_object_or_404

2.使用get_object_or_404函数查找指定的对象

get_object_or_404(Model, **kwargs)

Model :参数指定要查询的模型类(Model类)。

**kwargs:参数指定查询的条件,形式为 key=value。

3.返回值

如果查找成功,返回查找到的对象;如果查找不成功,则会抛出404错误。

实例1: 查询一篇博客

“`python
from django.shortcuts import render, get_object_or_404
from myapp.models import Blog

def blog_detail(request, pk):
blog = get_object_or_404(Blog, pk=pk)
context = {‘blog’: blog}
return render(request, ‘blog_detail.html’, context)
“`

在这个例子中,get_object_or_404函数会在Blog模型类中查找主键为pk的博客对象。如果找到,则会将对象赋值给变量blog;如果没找到,则抛出404错误。

每次用户访问博客详情页面时,Django都会根据页面访问URL中的pk参数查找对应的博客;如果博客不存在,则返回404错误。

实例2: 查询一个作者的所有博客

“`python
from django.shortcuts import render, get_object_or_404
from myapp.models import Author

def author_detail(request, pk):
author = get_object_or_404(Author, pk=pk)
blogs = author.blog_set.all()
context = {‘author’: author, ‘blogs’: blogs}
return render(request, ‘author_detail.html’, context)
“`

在这个例子中,get_object_or_404函数会在Author模型类中查找主键为pk的作者对象。如果找到,则会将对象赋值给变量author;如果没找到,则抛出404错误。

如果作者存在,就会通过访问作者对象的blog_set属性查找作者所写的所有博客。blog_set是Django框架中自动生成的属性,其值为一个QuerySet对象,可以方便地查找与作者相关的博客。

总之,get_object_or_404()函数是Django框架中实现查询并返回对象的快捷方法。在处理HTTP请求时,如果希望通过查询数据库返回一个对象的时候,可以使用该函数,并直接处理抛出的404错误。