全件取得と単件取得
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 8/23。
ページに本を表示するには、まずコードで本を読み込む必要があります。Book.objects.all()は、ループで処理できるリストのようなオブジェクトであるQuerySetを返します。各項目は、フィールドを属性として持つBookです。get()は行をちょうど1つ取得します。
for book in Book.objects.all():
print(book.author, book.year)
emma = Book.objects.get(title="Emma")
print(emma.year) # 1815get()は一致するものが1つだけあることを想定します。一致するものがない場合はBook.DoesNotExistが発生し、複数ある場合はBook.MultipleObjectsReturnedが発生します。これらは他の例外と同じように捕捉できます。ここにある2冊はジェーン・オースティンの作品です。
try:
Book.objects.get(author="Jane Austen")
except Book.MultipleObjectsReturned:
print("More than one")捕捉されない場合、その例外が発生した行でスクリプトは停止します。
チャレンジ
簡単explore.pyを書き換えましょう。
- すべての本のタイトルを、1行に1つずつ表示します。
Duneを取得し、Dune costsとその価格を表示します:Dune costs 9.99。- 本棚にない
Ulyssesを検索し、クラッシュする代わりにUlysses is not on the shelfと表示します。
Runを押します。Consoleに9つのタイトルが表示され、その後に2つの文が表示されます。
自分で試してみよう
from books.models import Book
# 1. すべての本のタイトルを1行に1つずつ表示する。
# 2. Duneを取得し、その価格を表示する。
# 3. Ulyssesを探す。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド