行排序
本课属于 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',)。
挑战
中等重写 explore.py,打印两行:
Cheapest:和最便宜的书名。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 在线编辑器