行の並べ替え
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 11/23。
最も安い本、最も新しい本、タイトルを古い順に並べたもの。いずれも順序に関する質問です。order_by()はフィールドで1つのQuerySetを並べ替え、MetaのorderingはすべてのQuerySetに対して同じことを行います。また、マイナス記号を付けると大きい値から小さい値へ並べ替えます。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()はBookオブジェクトを介さず、1つのフィールドの値を返します。flat=Trueを指定しない場合、各値は('Mary Beard',)のような要素が1つだけのタプルになります。
チャレンジ
中級explore.pyを書き換えて、次の2行を出力します。
Cheapest:と最も安い本のタイトル。Titles by year:と、古い本から順に並んだすべてのタイトルのリスト。
「Run」を押します。コンソールにはCheapest: Pride and PrejudiceとTitles by year: ['Pride and Prejudice', 'Emma', ...]が表示されます。
自分で試してみよう
from books.models import Book
# 1. 最安値:最も安い本のタイトル
# 2. 出版年順のタイトル:すべての本のタイトルを古い本から順に並べたリスト
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド