Menu
CoddyTech

更新と削除

CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 12/23。

価格は変わり、本は棚からなくなります。本を1冊変更するには、その属性を設定してsave()を呼び出します。save()を呼び出さないと、テーブルには古い値が残ります。一度に複数の行を変更するには、QuerySetに対してupdate()を呼び出します。これは1つのUPDATEを実行し、変更された行数を返します。delete()も同様に動作し、削除された行数を合計とモデルごとに返します。

Book.objects.filter(year__lt=1900).update(price="5.00")   # 2
Book.objects.filter(price__gt=14).delete()   # (1, {'books.Book': 1})

どちらもQuerySetに含まれる行だけを対象にするため、最初に絞り込みましょう。Book.objects.update(is_read=True)はすべての本に既読の印を付けます。また、どちらのメソッドも実行前に確認を求めません。

challenge icon

チャレンジ

簡単

explore.pyで、最後のprintの上に次のコードを追加します。

  1. Duneはセール中です。価格を7.99に設定します。
  2. Jane Austenの本をすべて、1回のクエリで既読にします。
  3. ミステリーの本をすべて、1回のクエリで削除します。

「実行」を押します。コンソールには7 books on the shelfと表示され、データタブには価格が7.99のDuneが表示され、ミステリーの本は表示されません。

自分で試してみよう

from books.models import Book

# 1. Duneはセール中です。価格を7.99に設定してください。

# 2. Jane Austenの本をすべて既読にしてください。

# 3. ミステリーの本をすべて譲ってください。

print(Book.objects.count(), "books on the shelf")
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

モデルと管理サイトのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド