更新と削除
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)はすべての本に既読の印を付けます。また、どちらのメソッドも実行前に確認を求めません。
チャレンジ
簡単explore.pyで、最後のprintの上に次のコードを追加します。
Duneはセール中です。価格を7.99に設定します。Jane Austenの本をすべて、1回のクエリで既読にします。- ミステリーの本をすべて、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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド