0
点赞
收藏
分享

微信扫一扫

Django从理论到实战(part32)--外键删除

学习笔记,仅供参考,有错必纠
参考自:Django打造大型企业官网–Huang Y;

外键删除



在学习外键删除之前,我们先学习一下外键



外键



比如,我们有一个​​User​​​和一个​​Article​​​两个模型,​​User​​​可以有多个​​Article​​​,​​Article​​​只能有一个​​User​​,并且通过外键进行引用:

class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=100)


class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()

author = models.ForeignKey("User",on_delete=models.CASCADE)

注意!​​ForeignKey​​​类定义为​​class ForeignKey(to,on_delete,**options)​​,第一个参数是指外键关联的模型,第二个参数是指定外键关联的模型数据被删除时,该模型的处理方式。



外键删除操作



如果一个模型使用了外键,那么在关联的那个模型数据被删掉后,该模型中应该采取什么样的操作,这可以通过​​on_delete​​来指定,可以指定的类型如下:

  1. ​CASCADE​​:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。
  2. ​PROTECT​​:受保护。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。
  3. ​SET_NULL​​:设置为空。如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空。如果设置这个选项,前提是要指定这个字段可以为空。
  4. ​SET_DEFAULT​​:设置默认值。如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。
  5. ​SET()​​​:如果外键的那条数据被删除了。那么将会获取​​SET​​​函数中的值来作为这个外键的值。​​SET​​函数可以接收一个可以调用的对象(比如函数或者方法),如果是可以调用的对象,那么会将这个对象调用后的结果作为值返回回去。
  6. ​DO_NOTHING​​:不采取任何行为。一切全看数据库级别的约束。

举报

相关推荐

0 条评论