Menu
CoddyTech

行排序

本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 11 课,共 23 课。

查找价格最低的书、最新的书,或按从旧到新的顺序列出所有书名,都需要先对书进行排序。order_by()会按某个字段对一个 QuerySet 排序,而Meta中的ordering会对所有书进行排序;加上减号表示按从高到低排序。first()会返回第一行;如果没有行,则返回None,因此它不像get()那样会引发异常:

Book.objects.order_by("-year").first()   # <Book: SPQR by Mary Beard>
Book.objects.order_by("-price").values_list("author", flat=True)
# <QuerySet ['Mary Beard', 'Umberto Eco', ...]>

values_list("author", flat=True)会跳过Book对象,直接返回值本身:'Mary Beard'。如果不使用flat=True,每个值都会放在一个只含一项的元组中:('Mary Beard',)。

challenge icon

挑战

中等

重写 explore.py,打印两行:

  1. Cheapest: 和最便宜的书名。
  2. Titles by year: 和所有书名组成的列表,最早出版的书排在最前面。打印列表本身。

按“运行”:控制台会显示 Cheapest: Pride and Prejudice,然后显示 Titles by year: ['Pride and Prejudice', 'Emma', 'The Murder of Roger Ackroyd', 'The Hobbit', 'Foundation', 'Dune', 'The Name of the Rose', 'Neuromancer', 'SPQR']。

亲手试试

from books.models import Book

# 1. 最便宜的书:这本书的书名

# 2. 按年份排列书名:将所有书名列成列表,最早出版的书排在前面

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

自己练习: Django 在线编辑器