【文件属性】:
文件名称:显示对象子集-libmodbus源码解析
文件大小:7.37MB
文件格式:PDF
更新时间:2021-06-24 08:00:43
PDF
10.4显示对象子集
现在仔细分析一下我们一直使用的 model属性。这个属性指定视图操作的数据库模型,在操作单个对象或对
象集合的通用视图中都可用。然而,这不是指定视图操作哪些对象的唯一方式,此外还可以使用 queryset属
性指定一组对象:
from django.views.generic import DetailView
from books.models import Publisher
class PublisherDetail(DetailView):
context_object_name = 'publisher'
queryset = Publisher.objects.all()
model = Publisher其实是 queryset = Publisher.objects.all()的简洁形式。然而,使用 queryset可以过滤
对象列表,进一步指定要在视图中查看的对象。下面举个列子。我们可能想按照出版日期排序图书列表,把
最近出版的放在前面:
from django.views.generic import ListView
from books.models import Book
class BookList(ListView):
queryset = Book.objects.order_by('-publication_date')
context_object_name = 'book_list'
这个示例相当简单,不过却很好地说明了其中的思想。当然,通常你想做的可能不仅仅是重新排序对象。如
果想呈现特定出版社出版的图书列表,也可以使用这个技术:
from django.views.generic import ListView
from books.models import Book
class AcmeBookList(ListView):
context_object_name = 'book_list'
queryset = Book.objects.filter(publisher__name='Acme Publishing')
template_name = 'books/acme_list.html'
注意,除了过滤查询集合之外,我们还自定义了模板名称。如若不然,通用视图会使用显示普通对象列表的
模板,而这可能不是你想要的。
还应注意,这不是显示特定出版社旗下图书的优雅方式。如果想添加关于出版社的其他页面,需要在 URL 配
置中多添加几行代码,而当出版社变多后,这样做也不合理。下一节将解决这个问题。
152 - 第 10 章 通用视图