更新と削除
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と表示されます。
自分で試してみよう
from books.models import Book
# 1. Duneはセール中です。価格を7.99に設定してください。
# 2. Jane Austenの本をすべて既読にしてください。
# 3. ミステリー本をすべて譲ってください。
print(Book.objects.count(), "books on the shelf")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド