首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django 外键引用自身和on_delete参数

该模型使用外键引用自己本身。...如果外键对应的那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。如果我们强行删除,Django就会报错。...、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null; 为什么在django中可以是用不同的约束去操作数据库呢。...比如 django 中 on_delete=CASCADE, 但是数据库的外键约束是RESTRICT....在进行删除A表数据时,发现被外键约束着,使数据不能被删除,则django会先去删除约束的B表数据,然后再来删除A表数据。

1.4K20

django_mysql_配置

在自己数据中创建一个djangi_demo create database django_demo default charset=utf8; ---- 定义模型类 1....='图书') # 外键 is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta:...2) django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...null是数据库范畴的概念,blank是表单验证范畴的 5) 外键 一般我用CASCADE 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models...中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外键表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据 SET_NULL

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django模型

    外键 外键这个东西,通常都是在业务逻辑层面来实现的,而不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的外键约束。在这里只是简单的介绍一下。...下面是另外一个模型,和前面的BookInfo模型通过外键关联起来。...外键:通过使用models.ForeignKey来设置外键,ForeignKey的第一个参数是要关联的模型类名,第二个参数是on_delete。...它的常用值可以如下: CASCADE级联,删除主表数据时连通一起删除外键表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据 SET_NULL设置为NULL...,此选项会抛出IntegrityError异常 注意:我们在数据库中,设置外键的时候需要制定另一张表中关联的字段,但是在Django里并没有指定。

    1.9K20

    Django学习-第七讲:django 中的常用字段、字段属性,外键和表关系、外键操作

    因此这里我们首先来介绍下外键在Django中的使用。 类定义为class ForeignKey(to,on_delete,**options)。...第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...外键删除操作 如果一个模型使用了外键。...那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下: 1.CASCADE:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。...即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。 3.SET_NULL:设置为空。如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空。

    4K30

    【愚公系列】2022年01月 Python教学课程 40-Django框架之模型属性详解

    文章目录 一、模型类定义 二、模型类迁移 总结 ---- 一、模型类定义 在models.py 文件中定义模型类,示例如下: from django.db import models # Create...,Django默认以小写app应用名_小写模型类名为数据库表名。...2) 关于主键 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE级联,删除主表数据时连通一起删除外键表中数据...PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据 SET_NULL设置为NULL,仅在该字段null=True允许为null时可用 SET_DEFAULT

    1.4K20

    Django model,baseModel基类, migrate移行

    补充:on_delete在外键中必须设置,表示级联关系。 级联关系:例,主表数据删除后,参照表的外键值,如何处理。  限制 insert参照表的数据之前,主表必须先登录数据,以避免脏数据产生等。...例:product被删,order也删。 DO_NOTHING:外键不会被级联。例:product被删,order的外键product不做任何处理SET_DEFAULT:配合default属性使用。...假设A表依赖B表,B记录删除,A表的外键字段重置为default属性设置的值。SET_NULL:配合NULL=True使用。...假设A表依赖B表,B记录删除,A表的外键字段重置为NULL, 例:product被删,order的外键product,重置为NULL注:多对多字段不能设置on_delete级联关系。有空再研究。...它必须在模型创建之前通过migrate在模型上指定。

    1.1K30

    Django(15)外键和表关系

    外键删除操作 如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下: CASCADE:级联操作。...如果外键对应的那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。 SET_NULL:设置为空。...如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。 SET():如果外键的那条数据被删除了。...注意:以上这些选项只是Django级别的,数据级别依旧是RESTRICT! 表关系 表之间的关系都是通过外键来进行关联的。而表之间的关系,无非就是三种关系:一对一、一对多、多对多等。...这个OneToOneField其实本质上就是一个外键,只不过这个外键有一个唯一约束(unique key),来实现一对一。 以后如果想要反向引用,那么是通过引用的模型的名字转换为小写的形式进行访问。

    2.1K40

    【Django 2.2文档系列】Model 外键中的on_delete参数用法

    场景 我们用Django的Model时,有时候需要关联外键。关联外键时,参数:on_delete的几个配置选项到底是干嘛的呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束的行为,在删除此条数据时,同事删除外键关联的对象。...比如:用户的有一个外键关联的是用户的健康记录表,当用户删除时,配置了这个参数的健康记录表中跟这个用户有关的数据也会被删除。...models.SET_NULL 设置关联的外键内容为null。只有设置了null=True时可用。当数据被删除时,被关联的外键内容被设置为null。...models.SET_DEFAULT 将外键的值设置为默认值。外键必须设置有默认值 。 models.SET()将SET()设置的值作为外键的值 ,如果传递了callable,则调用它的结果。

    2K10

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

    0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...) 1)关系字段放在AuthorDetail表中:作者删除详情删除,详情删除作者保留 2)作者找详情用 外键related_name(detail),详情找作者用 外键字段(author)...(books),书找出版社 外键字段(publish) 3)db_constraint断开表关联,on_delete规定逻辑关联删除动作,models.DO_NOTHING关联无动作 三.以外键字段关联...1)断关联,删除关联表记录,外键值置空 db_constraint=False, on_delete=models.SET_NULL, null=True, 2)断关联,删除关联表记录,外键值置默认值...2)正向找 外键字段,反向找 外键字段related_name 3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置,且一定是级联)

    3K20

    Django model 层之Models与Mysql数据库小结

    myapp_album.artist列引用mapp_musician.auto_id字段的值,即mapp_musician.auto_id为myapp_album表的外键。...删除被参照表的某条表记录,同时级联删除参照表中,同待删除记录存在外键关联关系的记录。 PROTECT 删除被参照表中的某条表记录,如果参照表中,存在与该记录有外键关系的记录,则不让删除。...SET_NULL 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为默认值。必须为外键列设置默认值。...SET() 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联关系的记录的外键列值为传递给SET()的参数值,如果传递给SET()的参数值是可调用对象,则设置为调用可调用对象获取的结果。

    2.2K20

    Django实战-调查问卷表设计优化

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...如果项目有另外一个需求,也需要与SurveryRecord建立外键关系,那么此时应该怎么做呢?是再给上面的表增加一个外键,然后重新修改数据库么?...=256) surveryrecord = GenericRelation("SurveryRecord") 如果一个表与其它表有多个外键关系,可以通过ContentType来解决这种关联 class..., blank=True, null=True, on_delete=models.SET_NULL) survery_item = models.ForeignKey('SurveryItem...', verbose_name="调查项", blank=True, null=True, on_delete=models.SET_NULL) content_type = models.ForeignKey

    1.8K20

    Django中的关系映射

    models.PROTECT:抛出ProtectedError以阻止被引用对象的删除 SET_NULL:设置ForeignKey为Null,需要指定null=True from django.db import...=models.CASCADE) # 一对一即users_id 对应 id 一对一映射(创建数据) ---- 无外键约束的模型类UserMit # 进入Django Shell操作 create1 =...UserMit.objects.create(name="henan) 有外键约束的模型类UserId create2 = UserId.objects.create(name="henan",users...,则为外键查询 # 通过外键绑定的users_id查询用户,接着上面的创建数据来 >>> a2.id 6 >>> a2.users_id UUID('43ff679f-42b2-4334-85a0...-b493503d6433') 反向查询 没有外键属性的一方,可以调用反向属性查询到关联的另一方 反向关联的属性为实例对象.引用类名(小写) 当反向引用不存在的时候,则会触发异常 当

    1.7K20

    【云+社区年度正文】Django从入门到精通No.2----模型

    django从入门到精通No.2----模型 一、前言 学过orm系统自然之道模型的重要性,很多web站点都需要与数据库交互,这个时候模型的设计就显得尤为重要,一个好的模型会使得项目方便管理并且易于维护...1.多对一 因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个外键的操作,即ForeignKey字段,而且外键要定义在多的一方。...limit_choices_to=None, # 在Admin或ModelForm中显示关联数据时,提供的条件,字典类型 db_constraint=True # 是否在数据库中创建外键约束...parent_link=False # 在Admin中是否显示关联数据 2.多对多 多对多的表,必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键...through_fields=None # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表 db_constraint=True # 是否在数据库中创建外键约束

    2.1K00

    Django 学习笔记之模型高级用法(上)

    2.1 ForeignKey 1) on_delete 在 Django 2.0 中,设置外键时需要添加一个 on_delete选项。外键本身涉及到两个表的数据,况且外键在数据库中是有约束行为。...SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是`blank=True, null=True`,定义该字段的时候,允许为空。...SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。 SET(): 自定义对应的实体的值。...2)limit_choices_to 该参数用于限制外键所能关联的对象,只能用于 Django 的 ModelForm(Django的表单模块)和 admin 后台,对其它场合无限制功能。...4) related_name 用于关联对象反向引用模型的名称。主要用于反向查询,即外键源模型实例通过管理器返回第一个模型的所有实例。

    2K30

    Django学习笔记之Django QuerySet的方法

    一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马的感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂...是啊是啊,删除普通数据的时候当然木有什么,但是如果删除外健关系很复杂的object时有木有想过细节?...嗯,实话告诉你,默认情况下调用delete()是会删除所有有关的外键对象的(是不是突然感觉自己之前代码里有坑了)所以我们需要详细说说这个方法,如何做才能让他不删除对应的外键或者说按照我们想象的方式进行删除呢...答案在这里: django.models 的 on_delete参数,此参数有以下几个可选值: CASCADE:这就是delete()的默认选项,也就是关联删除 PROTECT:如果删除的model obj...含有外键则引起 ProtectedError SET_NULL:就是把外键置空咯,当然前提是你得设置外键的null=True SET_DEFAULT:就是把外键设为默认咯,当然前提是你得设置外键的default

    59250

    django数据库迁移时候异常

    django数据库迁移时候异常 一.错误信息 Django在根据models生成数据库表时报 init() missing 1 required positional argument: 'on_delete...' 二.原因 在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错: TypeError: init() missing...1 required positional argument: 'on_delete' 三.解决方法 加上字段 举例 举例说明: user=models.OneToOneField(User) owner...)是默认值 参数说明: on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值 CASCADE:此值设置,是级联删除。...SET_NULL:此值设置,会把外键设置为null,前提是允许为null。 SET_DEFAULT:此值设置,会把设置为外键的默认值。 SET():此值设置,会调用外面的值,可以是一个函数。

    50520

    Django ORM 多表操作

    目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加外键) 一对多(外键 ForeignKey) 一对一 (OneToOneFeild) 多对多...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高的一方 一对多:外键字段建在多的一方 多对多:外键字段建在查询频率多的一方,在Django第三张表不需要创建...,自动创建 ps:外键字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及外键以虚拟字段的形式存在 创建模型 '''models.py''' from django.db import...3、一般不需要设置联级更新. 4、外键在一对多的多中设置:models.ForeignKey("关联类名", on_delete=models.CASCADE)。...6、若有模型类存在外键,创建数据时,要先创建外键关联的模型类的数据,不然创建包含外键的模型类的数据时,外键的关联模型类的数据会找不到 逆向到表模型 插入数据 ps:插入几条数据方便操作 ORM

    1.8K20
    领券