get_list_or_404() 是 Django 框架中的一个非常有用的函数,它可以用于快速获取一个列表数据。在获取数据的同时,如果没有找到数据,函数会抛出 404 异常。
使用方法:get_list_or_404(model, *args, **kwargs)
- model: 使用该函数的模型类
- *args: 除 model 以外的参数,可为查询条件
- **kwargs:查询条件
函数返回值:符合条件的列表数据
实例1
假如我们有这样一个 Book 的数据模型
class Book(models.Model):
title = models.CharField(max_length=50)
author = models.CharField(max_length=50)
publish_time = models.DateField()
price = models.DecimalField(max_digits=10, decimal_places=2)
我们想要在视图中查询出出版时间在2021年之后的所有书籍,代码如下:
from django.shortcuts import render, get_list_or_404
from .models import Book
from datetime import datetime
def book_list(request):
books = get_list_or_404(Book, publish_time__gte=datetime(2021,1,1))
return render(request, 'book_list.html', {'books': books})
上述代码中,使用 get_list_or_404
函数从 Book 模型中查询出出版时间在2021年之后的所有书籍,结果存入变量 books 中。如果没有找到符合条件的数据,该函数会抛出 404 异常。最后再将查询结果传入模板中以便展示。
实例2
通过 get_list_or_404 函数来获取当前用户发布的所有文章
假如我们有这样一个 Article 的数据模型
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_time = models.DateTimeField(auto_now_add=True)
我们想要在视图中查询出当前用户发布的所有文章,代码如下:
from django.shortcuts import render, get_list_or_404
from .models import Article
def article_list(request):
articles = get_list_or_404(Article, author=request.user)
return render(request, 'article_list.html', {'articles': articles})
上述代码中,使用 get_list_or_404
函数从 Article 模型中查询出当前用户发布的所有文章,结果存入变量 articles 中。如果没有找到符合条件的数据,该函数会抛出 404 异常。最后再将查询结果传入模板中以便展示。
注意事项:
- 在使用函数时,一定要保证查询结果是一个列表,如果不是,函数会抛出TypeError异常
- 确保查询条件正确,否则函数会抛出DoesNotExist异常或ValueError异常
- 由于该函数是查询列表,不建议用于单个数据查询,建议使用
get_object_or_404
函数