Django外键的删除
来源:互联网 发布:韩顺平php全套视频400 编辑:程序博客网 时间:2024/06/04 18:11
转自:http://2goo.info/blog/panjj/Django/2011/04/23/515
Django 1.3版本以后,对models外键进行了扩展,记得之前models的外键删除,都是级联删除的,举个例子好理解:Cateogry和Blog关系,Cateory有多个Blog,所以常常在Blog实体里新建一个category的外键,当我们删除一个Category的时候,归属该Category的所有Blog,同时都被删除了,这就是级联删除了。
有个题外话,Django的models和底层的数据库联系很密切,models之间创建的关联,都直接映射到数据库,是真正的物理关联,个人觉得这种方式,有利有弊,好的方面就是更好保持了数据的一致性;感觉不好的是,这样数据库的表之间都建立物理关联,开发过程中建立models的时候,最好想好了表的关联,不然后面models加关联,需要在数据库上手动去关联,而且如果想在数据库操作数据的时候,需要考虑这些关联,不然你可能遇到一些关联的问题。在Rails上,这点都是在程序级上定义models关联,数据库并没有是正的物理关联。既然要用Django,应该先抛开这些,接受它的设计理念,才不会有困惑。
Django 1.3 models之间关联还是保存原来的做法,当你删除一个外键的时候,外键关联的实体也被删除,但在创建models的时候,外键增加了一个可选参数on_delete。今天看看它的用法:
- class Blog(models.Model):
- user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
- ...
on_delete有多少个选项呢:
CASCADE:这就是默认的选项,级联删除,你无需显性指定它。
PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
SET(): 自定义一个值,该值当然只能是对应的实体了,看一下代码:
- def get_sentinel_user():
- return User.objects.get_or_create(username='deleted')[0]
- class MyModel(models.Model):
- user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))
0 0
- Django外键的删除
- Django外键的删除
- [Django]orm中的外键级联删除
- django 外键关联删除解决
- django 级联删除的设置
- Django级联删除的选项
- django 将删除的表重新生成
- Django 删除表遇到的一些错误
- Django rest framework 常用外键命令 (加入、删除、查看所有、查看除了自己以外的所有、摘除分离对象间外键关系)
- 如何删除Django
- django 级联删除
- 如何彻底删除django
- Django 创建/删除用户
- django如何实现文件的上传,修改,删除,展示(04)
- Django删除migrations文件夹中的文件后出现的异常
- 记一次Django级联删除引发的故障
- django 小白 前端与数据库的删除查询操作
- Django 外键操作
- MySql学习笔记
- github如何删除一个repository(仓库)
- 算法导论第5章5.4概率分析和随机算法
- 筛子法求质数
- opencv haar+adaboost使用心得
- Django外键的删除
- wince 中使用HttpSendRequest函数POST数据时应该注意的一点
- Python中生成唯一码(uuid的使用)
- jquery集合遍历
- edx 学习备忘
- ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
- 排序算法(七):归并排序
- IOS通过加速感应器实现手机实现手机屏幕上的足球可以来回的滚动反弹
- 将阿拉伯数字钱格式转换成中文格式