Django的get_queryset()函数介绍
get_queryset()
是Django中的一个函数,它作用于一个Model或一个QuerySet对象,返回一个QuerySet对象。在Django的视图类中,get_queryset()
常常被重写,用于过滤、排序等等操作。
作用
get_queryset()
函数可以用来获取一个Model或一个QuerySet对象,以供视图类进行处理。主要的作用有两个:过滤和排序。
-
过滤。可以使用
get_queryset()
对获取到的Model或QuerySet对象进行过滤。比如只获取已验证的用户,并且按照创建时间排序。 -
排序。可以使用
get_queryset()
对获取到的Model或QuerySet对象进行排序。
使用方法
我们可以通过写一个视图类,并在其中重写get_queryset()
函数来使用它。以下是一个基本的Django视图类,其中用get_queryset()
方法采用了一个简单的数据过滤:
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Book
class BookListView(ListView):
model = Book
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(year_published__gte=2010)
这是一个基本的视图,它显示了所有2010年以后出版的书籍。我们使用super().get_queryset()
来获取默认的queryset,然后使用filter()
方法来对查询进行过滤。这个视图将用model属性指定的Book
对象进行操作,并返回过滤后的对象供视图显示。
实例说明
首先我们创建一个Django项目,并在其中定义一个Model。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255)
age = models.PositiveIntegerField()
class Book(models.Model):
name = models.CharField(max_length=255)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
year_published = models.PositiveIntegerField()
现在我们来设计一个只显示年份大于2010年的书籍的视图。请注意,这个视图使用get_queryset()
来过滤数据。以下是Django的视图类:
from django.shortcuts import render
from django.views.generic.list import ListView
from .models import Book
class BookListView(ListView):
model = Book
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(year_published__gte=2010)
get_queryset()
的返回结果是一个QuerySet对象。在上面的代码段中,我们对已经从超类中获取的queryset进行了过滤,以便只有年份大于或等于2010的书籍被视图处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 get_queryset() 函数:获取查询集合 - Python技术站