搜索
简帛阁>技术文章>django模型中有外键关系的表删除相关设置

django模型中有外键关系的表删除相关设置

0904自我总结

django模型中有外键关系的表删除相关设置

一.一对一

例如有Author、AuthorDetail两表

复制author = models.OneToOneField(to='Author', null=True,
        related_name='detail',
        db_constraint=False,
        on_delete=models.CASCADE
    )

1)关系字段放在AuthorDetail表中:作者删除详情删除,详情删除作者保留
2)作者找详情用 外键related_name(detail),详情找作者用 外键字段(author)
3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.CASCADE级联删除

二.一对多

例如Book、Publish两表

复制publish = models.ForeignKey(to='Publish', null=True,
        related_name='books',
        db_constraint=False,
        on_delete=models.DO_NOTHING,
        
    )

1)关系字段放在Book表中(多的一方):出版社删除书外键不动,书删除没有任何影响
2)出版社找书用 外键related_name(books),书找出版社 外键字段(publish)
3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.DO_NOTHING关联无动作

三.以外键字段关联

1)断关联,删除关联表记录,外键值置空
db_constraint=False, on_delete=models.SET_NULL, null=True,

2)断关联,删除关联表记录,外键值置默认值
db_constraint=False, on_delete=models.SET_DEFAULT, default=1,

注意:on_delete必须声明models.DO_NOTHING为删除级联关系, models.CASCAD为级联关系,'SET_NULL'置空,SET_DEFAULT设为默认值

两者区别

  • models.SET关联表内容删了,关联的相关内容不会删除
  • models.CASCAD关联表内容删了,关联的相关内容会删除

db_constraint关系断开后,但是不影响联表查询

四.多对多关系

例如Book、Author两表

复制authors = models.ManyToManyField(to='Author', null=True,
        related_name='books',
        db_constraint=False,
    )

1)关系字段放在任意一方都可以:出版社删除或书删除彼此不影响,但关系表一定级联删除
2)正向找 外键字段,反向找 外键字段related_name
3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置,且一定是级联)

模型关系关系字段类型关系型数据库关系包括三种类型:ForeignKey:一对多,将字段定义在多一端中。ManyToManyField:多对多,将字段定义在两端中。OneToOneField:一对
Eloquent是什么Eloquent是一个ORM,全称为ObjectRelationalMapping,翻译为“对象关系映射”(如果只把它当成DatabaseAbstractionLayer数组库抽
如下所示:*coding:utf8*from__future__importunicode_literalsfromdjangodbimportmodelsCreateyourmodelshere一对
前言在django框架设计中采用了mtv模型,即Model,template,viewerModel相对于传统三层或者mvc框架来说就相当对数据处理层,它主要负责与数据交互,在使用django
删除字段从Model中删除一个字段要比添加容易得多。删除字段,仅仅只要以下几个步骤:删除字段,然后重新启动你web服务器。用以下命令从数据库中删除字段:ALTERTABLEbooks_bookDRO
关系模型简述关系模型是基于处理方式抽象形成。是在对传统及其操作进行数学化严格定义基础上,引入集合理论与逻辑学理论提出关系模型也是数据库三大经典数据模型之一,也是现在大多数商品化数据库系统
Y19介绍如何创建各种关系数据模型,具体实现各种功能先配置settingspy中连接mysql数据库:(Y12有介绍)DATABASES{<!>default:{<!>EN
一对多模型一对多关系,例如员工跟部门。一个部门有多个员工。那么在django怎么建立这种关系呢?其实就是利用外键,在多一方,字段指定外键即可。例如员工和部门,员工是多,所以在员工直接部门即可。
关系三类完整性约束:1实体完整性和参照完整性关系模型必须满足完整性约束条件称为关系两个不变性,应该由关系系统自动支持2用户定义完整性应用领域需要遵循约束条件,体现了具体领域中的语义约束实体
Django用户管理相关:createtabledjango_content_type(/*内容类型*/idint(11)notnullauto_increment,app_labelvarc