Menu
CoddyTech

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)   # 1815

get() 需要恰好匹配一条记录。没有匹配项时会引发 Book.DoesNotExist,有多个匹配项时会引发 Book.MultipleObjectsReturned,你可以像捕获任何异常一样捕获它们。这里有两本书是 Jane Austen 写的:

try:
    Book.objects.get(author="Jane Austen")
except Book.MultipleObjectsReturned:
    print("More than one")

如果没有捕获异常,脚本会在那一行停止运行。

challenge icon

挑战

简单

重写 explore.py:

  1. 打印每本书的标题,每行一个。
  2. 获取 Dune,并打印 Dune costs 和它的价格:Dune costs 9.99。
  3. 查找不在书架上的 Ulysses,并打印 Ulysses is not on the shelf,而不是让程序崩溃。

按“运行”:控制台会列出 9 个标题,然后显示两个句子。

亲手试试

from books.models import Book

# 1. 每行打印一本书的书名。

# 2. 获取 Dune 并打印它的价格。

# 3. 查找 Ulysses。
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

模型和管理后台中的所有课

自己练习: Django 在线编辑器