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

django 外键引用自身和on_delete参数

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

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

    Django 外键引用另一个表中的多个字段

    在 Django 中,外键(ForeignKey)通常只引用另一张表的一个字段,比如一个主键或一个唯一标识字段。然而,如果我们需要让一个外键引用另一张表中的多个字段,通常有以下几种方法来实现这种关系。...1、问题背景在 Django 中,模型之间的关系通常使用外键(ForeignKey)来建立。外键允许一个模型中的字段引用另一个模型中的主键。然而,有时我们需要在一个模型中引用另一个模型中的多个字段。...以下是如何在 Django 中使用复合主键来实现外键引用另一个表中的多个字段:在 product_models 模型中,添加一个 id 字段作为主键:class product_models(models.Model...划重点Django 不直接支持复合外键,但可以通过添加唯一约束、使用中间表或在查询中使用逻辑约束来实现类似效果。...使用 UniqueConstraint 是一种常见的方式,它可以确保组合字段的唯一性,然后用一个普通的 ForeignKey 引用这个组合。

    10410

    如何使用 Django 更新模型字段(包括外键字段)

    本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决外键字段更新的方法,特别是使用 attrs 方式的实现。1. 简介Django 中的模型是应用程序中管理数据的核心部分。...常见的方式是使用模型实例的 save() 方法来保存修改。对于外键字段的更新,我们可以使用直接设置外键字段的方式,而不需要每次都查询外键表中的对象。...下面我们详细探讨这种更新方式:使用 attrs 方式更新外键字段在 Django 中,可以直接通过设置外键字段的方式来更新模型中的外键关联。...高级用法:使用 update() 方法批量更新字段除了直接设置外键字段外,还可以使用 Django 的 update() 方法来批量更新查询集中的对象。...总结与实践建议在本教程中,我们深入探讨了如何使用 Django 更新模型字段,特别是处理外键字段更新的方法。

    28010

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

    外键和表关系 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。...因此这里我们首先来介绍下外键在Django中的使用。 类定义为class ForeignKey(to,on_delete,**options)。...第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...在论坛开发中,一般评论都可以进行二级评论,即可以针对另外一个评论进行评论,那么在定义模型的时候就需要使用外键来引用自身 class Comment(models.Model): content...即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据。 3.SET_NULL:设置为空。如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空。

    4K30

    sqlserver语句创建表格_创建表的sql语句外键

    今天介绍一下如何使用SQL Server语句创建表并添加数据 首先先了解一下表的模式,在数据库中根据模式进行分组避免表名称的冲突 在SQL Server 2014中直接新建表是默认的前缀dbo 而命名其他的模式需要使用...SQL Server语句进行创建 下面将一步一步的进行演示,首先是创建一个数据库 然后创建模式在后面使用 根据创建的模式或者使用默认的模式名,进行创建表,语句如下图 下面解释一下句子的意思 看一下新建好的表...后面介绍如何在新表里面添加数据 根据表的列数和对应的数据类型在括号中一一对应的添加数据并使用逗号隔开 注意,以上添加数据的方法需要同时添加全部字段 如果需要添加单个字段或者较多且不是全部字段则方法如下...当添加不是全部字段时注意不能为空的字段必须写入数据 最后看一下添加好数据的表 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183704.html原文链接:https

    2.2K10

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

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

    3K20

    Django外键(ForeignKey)操作以及related_name的作用

    之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,...,并获取老师的相关信息 返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息...,在models.py使用Foreign定义外键的时候也可以传入一个参数related_name,操作如下: 执行python manage.py makemigrations 和 python manage.py...migrate 从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以在定义主表的外键的时候,直接就给外键定义好名称使用related_name...比如我得到了一个student对象,然后我想要得到这个student对象对应的主表teache中的信息的话,就使用 student.teacher 获取,其中这个teacher就是在子表中定义的外键字段

    2K10

    Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用

    可以看到,我们通过model_class就可以获取对应的类。也就是说,今后,我们如果自己定义model如果有外键关联到這个ContentType上,我们就能找到对应的model名称。...对于新鲜事这个功能来说就是使用GenericRelation来产生一个特殊的外键,它不像models.ForeignKey那样,必须指定一个Model来作为它指向的对象。...怎么从这张操作记录表中得到相应操作的model呢,这就得用到fields.GenericForeignKey,它是一个特殊的外键,可以指向任何Model的实例,在这里就可以通过这个字段来指向类似Post...是再给上面的表增加一个外键,然后重新修改数据库么?显然是不能,一旦数据库被创建了,我们几乎很少再去修改数据,如果再给其添加额外字段,无疑会带来不必要的麻烦。...总之,如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联。

    4.4K20

    Django中基表的创建、外键字段属性简介、脏数据概念、子序列化

    Django中基表的设置 通过图书管理系统引入多表操作:如果我们创建表的方式是先抽象出表与表之间相同的字段建一个父类,然后在用每个表类去继承这个父类,如下面的代码,我们将无法得到期望的表字段。...更合理) """ Django orm中外键字段属性详解 在建表之前我们对外键字段属性进行了解: 1)related_name在外键中设置外键反向查询的字段名:正向找字段名,反向找related_name...SET_DEFAULT:假设A表依赖B表,B记录删除,A表的外键字段重置为default属性设置的值,所以必须配合default属性使用。...例子:部门没有了,部门员工里的部门字段改为未分组部门的id SET_NULL使用的时候需要NULL=True;假设A表依赖B表,B记录删除,A表的外键字段重置为NULL,所以必须配合NULL=True使用...子序列化的使用方法及注意事项: 1)只能在序列化中使用 2)字段名必须是外键(正向反向都可以)字段,相对于自定义序列化外键字段,自定义序列化字段不能参与反序列化,而子序列化必须为外键名,子序列化字段不写入数据库

    4.3K30

    如何使用约束条件?主键、自增、外键、非空....

    约束的基本使用 2. 外键约束 ⑦【MySQL】约束条件 1. 约束的基本使用 约束: 什么是约束? 约束是作用于表中字段上的规则,用于限制存储在表中的数据。...,保证数据的一致性和完整性 FOREIGN KEY ⑦自增约束 AUTO_INCREMENT -- 案例 /* 创建表 ID唯一标识:id、int、主键且自增 姓名:name、varchar(10)、...外键约束 如何添加外键约束?: 方式一(在创建表时指定外键约束): CREATE TABLE 表名( 字段名 数据类型, ......外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名); 外键的删除/更新行为: NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除...,存在则将外键关联的字段值设置为null(前提是外键关联字段可以为null) SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb

    536100

    【重学 MySQL】六十六、外键约束的使用

    【重学 MySQL】六十六、外键约束的使用 在MySQL中,外键约束是一种重要的数据库约束,用于确保表中的数据完整性。...外键约束的删除 如果不再需要外键约束,可以使用ALTER TABLE语句将其删除。...需要注意的是,外键约束的创建和使用需要满足一定的条件,如主表必须存在、主键必须定义、数据类型必须一致等。...综上所述,外键约束在MySQL中扮演着重要的角色,它有助于维护数据库中的数据完整性和一致性。在使用外键约束时,需要确保满足其创建条件,并正确地创建和删除外键约束。...不建外键约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的引用完整性,只能依靠程序员的自觉,或者是在Java程序中进行限定。

    13110
    领券