All 和 Get
本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 8 课,共 23 课。
页面要显示书籍,代码必须先把书籍读出来。Book.objects.all() 会返回一个 QuerySet,它类似列表,可以用循环遍历;其中的每一项都是一个 Book,其字段作为属性。get() 会恰好获取一行:
for book in Book.objects.all():
print(book.author, book.year)
emma = Book.objects.get(title="Emma")
print(emma.year) # 1815get() 需要恰好匹配一条记录。没有匹配项时会引发 Book.DoesNotExist,有多个匹配项时会引发 Book.MultipleObjectsReturned,你可以像捕获任何异常一样捕获它们。这里有两本书是 Jane Austen 写的:
try:
Book.objects.get(author="Jane Austen")
except Book.MultipleObjectsReturned:
print("More than one")如果没有捕获异常,脚本会在那一行停止运行。
挑战
简单重写 explore.py:
- 打印每本书的标题,每行一个。
- 获取
Dune,并打印Dune costs和它的价格:Dune costs 9.99。 - 查找不在书架上的
Ulysses,并打印Ulysses is not on the shelf,而不是让程序崩溃。
按“运行”:控制台会列出 9 个标题,然后显示两个句子。
亲手试试
from books.models import Book
# 1. 每行打印一本书的书名。
# 2. 获取 Dune 并打印它的价格。
# 3. 查找 Ulysses。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
模型和管理后台中的所有课
自己练习: Django 在线编辑器