Django ORM中,如何设置表断关联db_constraint和on_delete的参数?

2026-05-28 17:512阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计504个文字,预计阅读时间需要3分钟。

Django ORM中,如何设置表断关联db_constraint和on_delete的参数?

取消外键约束后,表间逻辑关联依然存在,但不再受外键约束限制。这意味着表与表之间不再有外键约束,但可通过ORM连接查询进行正常使用,保留了跨表查询的便利,但失去了外键约束+on_delete的删除关联表数据功能。

db_constraint=False

取消外键约束,只是逻辑上的关联,表与表之间不再受外键约束,但是orm连表查询可正常使用,就是保留跨表查询的便利,但是又没有了外键约束

on_delete

当删除关联表中的数据时,当前表与其关联的行的行为。

 1、models.CASCADE

  删除关联数据,与之关联也删除

 2、models.DO_NOTHING

  删除关联数据,引发错误IntegrityError,自己不受影响,什么事都不做

Django ORM中,如何设置表断关联db_constraint和on_delete的参数?

 3、models.PROTECT

  删除关联数据,引发错误ProtectedError

 4、models.SET_NULL

  删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)

置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。

 5、models.SET_DEFAULT

  删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')

置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。

 6、models.SET

  删除关联数据,

  a. 与之关联的值设置为指定值,设置:models.SET(值)

  b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

本文共计504个文字,预计阅读时间需要3分钟。

Django ORM中,如何设置表断关联db_constraint和on_delete的参数?

取消外键约束后,表间逻辑关联依然存在,但不再受外键约束限制。这意味着表与表之间不再有外键约束,但可通过ORM连接查询进行正常使用,保留了跨表查询的便利,但失去了外键约束+on_delete的删除关联表数据功能。

db_constraint=False

取消外键约束,只是逻辑上的关联,表与表之间不再受外键约束,但是orm连表查询可正常使用,就是保留跨表查询的便利,但是又没有了外键约束

on_delete

当删除关联表中的数据时,当前表与其关联的行的行为。

 1、models.CASCADE

  删除关联数据,与之关联也删除

 2、models.DO_NOTHING

  删除关联数据,引发错误IntegrityError,自己不受影响,什么事都不做

Django ORM中,如何设置表断关联db_constraint和on_delete的参数?

 3、models.PROTECT

  删除关联数据,引发错误ProtectedError

 4、models.SET_NULL

  删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)

置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。

 5、models.SET_DEFAULT

  删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')

置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。

 6、models.SET

  删除关联数据,

  a. 与之关联的值设置为指定值,设置:models.SET(值)

  b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)