Menu
CoddyTech

Обновление и удаление

Часть раздела Модели и панель администратора путешествия по Django на Coddy. Урок 12 из 23.

Цены меняются, а книги исчезают с полок. Чтобы изменить одну книгу, задайте её атрибут и вызовите save(); без save() в таблице останется старое значение. Чтобы изменить сразу много строк, вызовите update() для QuerySet. Он выполняет один запрос 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 как прочитанные, выполнив один запрос.
  3. Удали все книги-детективы, выполнив один запрос.

Нажми «Запустить». В консоли будет показано 7 books on the shelf, а на вкладке «Данные» у книги Dune будет цена 7.99, и детективов не останется.

Попробуйте сами

from books.models import Book

# 1. «Дюна» продаётся со скидкой: установите для неё цену 7.99.

# 2. Отметьте все книги Джейн Остин как прочитанные.

# 3. Раздайте все детективные книги.

print(Book.objects.count(), "books on the shelf")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Модели и панель администратора

Потренируйтесь самостоятельно: Песочница Django