更新和删除
本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 12 课,共 23 课。
价格会变化,书也会离开书架。要修改一本书,请设置它的属性并调用 save();如果不调用 save(),表中会保留旧值。要一次修改多行,请对 QuerySet 调用 update()。它会运行一条 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。
亲手试试
from books.models import Book
# 1. Dune 正在打折:将它的价格设为 7.99。
# 2. 将 Jane Austen 写的每本书标记为已读。
# 3. 送出所有悬疑类书籍。
print(Book.objects.count(), "books on the shelf")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
模型和管理后台中的所有课
自己练习: Django 在线编辑器