Обновление и удаление
Часть раздела Модели и панель администратора путешествия по 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) помечает все книги, и ни один из этих методов не спрашивает подтверждения перед выполнением.
Задание
ЛегкоВ explore.py, перед последним print:
- На книгу
Duneдействует скидка: установи её цену равной7.99. - Отметь все книги
Jane Austenкак прочитанные, выполнив один запрос. - Удали все книги-детективы, выполнив один запрос.
Нажми «Запустить». В консоли будет показано 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")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Модели и панель администратора
2Запросы с помощью ORM
Создание записейAll и GetФильтрация и поискПодсчёт записейСортировка записейОбновление и удалениеПотренируйтесь самостоятельно: Песочница Django