Django-on_delete

摘要:
PROTECT:保护模式。如果使用此选项,删除时将抛出ProtectedError错误。SET_ NULL:空模式。删除时,外键字段设置为空,前提是空白=True且空=True。定义此字段时,允许为空。

一、外键的删除

关于on_delete的总结

  • 1、常见的使用方式(设置为null)

    class BookModel(models.Model):
        """
        书籍表
        """
        book_name = models.CharField(max_length=100, verbose_name='书名')
        # 表示外键关联到作者表,当作者表删除了该条数据,图书表中不删除,仅仅是把外键置空
        author = models.ForeignKey(AuthModel, null=True, blank=True, on_delete=models.SET_NULL)
        price = models.FloatField(verbose_name='价格')
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
    
    
  •  2、关于别的属性的介绍
  1. CASCADE:这就是默认的选项,级联删除,你无需显性指定它。
  2. PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
  3. SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
  4. SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
  5. SET(): 自定义一个值,该值当然只能是对应的实体了
  • 3、补充说明:关于SET()的使用

    **官方案例**
    def get_sentinel_user():
        return get_user_model().objects.get_or_create(username='deleted')[0]
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.SET(get_sentinel_user),
        )
    
  • 免责声明:文章转载自《Django-on_delete》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

    上篇Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReferencejournalctl查看内核/应用日志 一介凡人下篇

    宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

    相关文章

    Oracle临时表用法的经验心得 老猫

    文章主要介绍的是Oracle临时表的实际用法的经验心得,我们目前所使用的 Oracle 是作为数据库支撑平台的实际应用,可以说其数据量还是算的上比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。   当然在 Oracle 中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的...

    使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种。特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而导致很多人都不会或不熟悉使用SQL脚本操作数据库。 接下面介绍的是我们日常开发中常规性的各种操作,先看看基本知识,随后使用coding来表述。 SQL Ser...

    在EggJS中使用Sequelize做联表查询

    内容转自https://www.jianshu.com/p/078087c69b77,感谢 1.EggJS引用Sequelize 安装sequelize依赖和mysql驱动 cnpm i egg-sequelize mysql2 -S 启用sequelize插件   在config/plugin.js里面添加 sequelize: { enable...

    MySQL之级联删除、级联更新、级联置空

    1. 准备测试表 # 专业表major create table major(id int primary key auto_increment, mmane varchar(20))engine=innodb default charset=utf8; # 学生表mstudent create table mstudent(id int primar...

    DRF 序列化组件

    Serializers 序列化组件 Django的序列化方法 classBooksView(View): defget(self, request): book_list = Book.objects.values("id", "title", "chapter", "pub_time", "publisher")...

    【转贴收藏】SQL常用语句,含查看数据库日志

    --//清空日志checkpoint--//查看数据库日志select * from ::fn_dblog(null,null)select * from ::fn_dblog(null,null) where [current lsn]>='000001ae:00000074:0001' and [current lsn]<= '00000...