当前位置: 首页 > web >正文

Python学习笔记--使用Django修改和删除数据

一、修改

方式一:模型类的对象.属性 = 更改的属性值,模型类的对象.save()

返回值:编辑的模型类的对象。

def update_book(request):book = models.Book.objects.filter(pk=1).first()book.price = "169"book.save()return HttpResponse(book.price)

方式二:修改数据 方法二:QuerySet 类型数据.update()。

返回值:整数,受影响的行数。推荐使用方式 

def update_book2(request):books = models.Book.objects.filter(pk__in=[2, 3]).update(price="169")return HttpResponse(books)

二、删除:

方式一:使用模型类的 对象.delete()。

返回值:元组,第一个元素为受影响的行数。

下面的方法中取出第一个对象进行删除

def delete_book(request):books = models.Book.objects.filter(pk=1).first().delete()print(books)

方式二:使用QuerySet类型数据的 .delete()。

返回值:元组,第一个元素为受影响的行数。

下面的方法中查询出符合条件的数据进行删除

def delete_book2(request):books = models.Book.objects.filter(pk__in=[2, 3]).delete()print(books)

注意事项:

  • Django 在删除数据时默认会进行级联删除(CASCADE),也就是删除一个对象时也会删除与它相关联的外键对象,但这取决于在模型字段上设置的 on_delete 参数。
  • 方式二delete() 方法是 QuerySet 数据类型的方法,想要删除所有数据,需要写 all。
books=models.Book.objects.delete()  # 报错books=models.Book.objects.all().delete()   # 删除成功

三、拓展:删除策略

on_delete 参数详解

1. models.CASCADE (级联删除,默认值)

当父表记录被删除时,同时删除所有关联的子表记录。

示例:

from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=200)# 默认就是 CASCADEauthor = models.ForeignKey(Author, on_delete=models.CASCADE)# 等同于:# author = models.ForeignKey(Author)  # 不写 on_delete 时默认就是 CASCADE

2. models.PROTECT (保护模式)

阻止删除操作,如果存在关联的子表记录。

示例:

class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.PROTECT)

3. models.SET_NULL (设为空)

当父表记录被删除时,将外键字段设为 NULL(需要字段允许为空)。

class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True, blank=True)

4. models.SET_DEFAULT (设为默认值)

当父表记录被删除时,将外键字段设为默认值。

class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.SET_DEFAULT, default=1)

5. models.SET() (设为指定值)

当父表记录被删除时,将外键字段设为指定的值或调用函数。

def get_default_author():return Author.objects.get_or_create(name="未知作者")[0].idclass Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.SET(get_default_author))

6. models.DO_NOTHING (不采取任何动作)

数据库级别不进行任何操作(需要在数据库层面设置约束)

class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.DO_NOTHING)

http://www.xdnf.cn/news/19952.html

相关文章:

  • Python学习笔记--使用Django查询数据
  • 网络协议之https?
  • 智能开发新突破:大模型驱动的QAC与TESSY助手实战分享
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • phpstorm 操作git 另外的操作在 我的收藏
  • Maven动态控制版本号秘籍:高效发包部署,版本管理不再头疼!
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • 《WINDOWS 环境下32位汇编语言程序设计》第11章 动态链接库和钩子
  • nano banana官方最强Prompt模板来了!六大场景模板详解
  • GEM5学习(4): 运行全系统模式的ARM系统
  • 如何构建企业级RAG知识库?实战方法、关键细节与平台选型
  • 只会刷App?大学生学透Android开发,直接开挂!
  • 【沉浸式解决问题】浮点数计算精度误差,round后值错误,0.1+0.2不等于0.3?
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • 机器视觉opencv总结
  • NuttX编译流程与config.h生成解析
  • 插入排序及希尔排序
  • AR智慧运维系统介绍
  • 【机器学习】实战:市场增长点分析挖掘项目
  • 算法模板(Java版)_链表(单链表、双链表)、栈和队列
  • HarmonyOS Stage 模型深度解析:构建现代化、高性能应用
  • IotDB批量数据脱敏DEMO
  • wpf 自定义控件,只能输入小数点,并且能控制小数点位数
  • 微服务多级缓存:从问题到实战(小白也能看懂的亿级流量方案)
  • FastJson
  • 技术框架之脚手架实现
  • .vsdx文件转pdf、word、ppt等文件在线分享(免费版)
  • Linux的墙上时钟和单调时钟的区别
  • Flutter环境搭建全攻略之-Macos环境搭建
  • Android 中自定义控件实现 AppCompatSpinner 功能