全件取得と単件取得
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と表示します。
「実行」を押すと、コンソールに9冊のタイトルが表示され、その後に2つの文が表示されます。
自分で試してみよう
from books.models import Book
# 1. すべての本のタイトルを1行に1つずつ表示する。
# 2. Duneを取得して、その価格を表示する。
# 3. Ulyssesを探す。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド