Menu
CoddyTech

更新和删除

本课属于 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) 会标记所有书,而且这两个方法执行前都不会询问你。

challenge icon

挑战

简单

在 explore.py 中,放在最后一个 print 上方:

  1. Dune 正在打折:将它的价格设为 7.99。
  2. 用一次查询,将 Jane Austen 写的所有图书都标记为已读。
  3. 用一次查询,删除所有悬疑类图书。

按“运行”:控制台会显示 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")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

模型和管理后台中的所有课

自己练习: Django 在线编辑器