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

Django 1.11 -创建列外键而不删除

Django 1.11是一个开源的Python web框架,用于快速构建高效且可扩展的Web应用程序。该版本是Django框架的一个旧版本,尽管有一些限制,但仍然被广泛使用。

在Django 1.11中,当我们需要创建一个外键列时,Django会自动执行删除操作,即在表格中添加一个外键列,并自动为该列创建一个引用约束。这个特性是Django ORM(对象关系映射)的一部分,用于处理数据库表之间的关系。

但是,有时候我们可能需要在创建外键列时避免自动删除操作。在Django 1.11中,可以通过以下步骤实现这一点:

  1. 首先,我们需要在模型中定义外键字段,例如:
代码语言:txt
复制
from django.db import models

class MyModel(models.Model):
    foreign_key = models.ForeignKey(OtherModel, on_delete=models.DO_NOTHING)

上述代码中,foreign_key字段是一个外键字段,指向另一个模型OtherModel。关键参数on_delete=models.DO_NOTHING表示在创建外键列时不执行删除操作。

  1. 在使用迁移工具(如makemigrationsmigrate)更新数据库模式时,确保外键列不会自动删除。可以通过以下命令完成:
代码语言:txt
复制
python manage.py makemigrations
python manage.py migrate --fake

上述命令中,makemigrations用于生成迁移文件,migrate --fake用于模拟迁移操作,但实际上不会执行对数据库的任何更改。

需要注意的是,这种方法只是防止删除操作,并不会为外键列创建引用约束。因此,在使用这种方法时,需要确保数据库的完整性,以避免引用无效的外键值。

对于Django 1.11,腾讯云提供的相关产品和服务推荐如下:

  • 云服务器CVM(https://cloud.tencent.com/product/cvm):用于部署和运行Django应用程序的弹性云服务器实例。
  • 云数据库MySQL(https://cloud.tencent.com/product/cdb_mysql):提供可靠的MySQL数据库服务,可作为Django应用程序的后端存储。
  • 云存储COS(https://cloud.tencent.com/product/cos):用于存储和分发静态和动态内容,如用户上传的文件和媒体资源。
  • Serverless云函数SCF(https://cloud.tencent.com/product/scf):用于在事件驱动的无服务器架构中运行Django应用程序的计算函数。

请注意,以上链接仅为腾讯云产品介绍页面,更详细的产品信息和文档可在腾讯云官方网站上找到。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

    0904自我总结 django模型中有关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...,详情删除作者保留 2)作者找详情用 related_name(detail),详情找作者用 字段(author) 3)db_constraint断开表关联,on_delete规定逻辑关联删除动作...,书删除没有任何影响 2)出版社找书用 related_name(books),书找出版社 字段(publish) 3)db_constraint断开表关联,on_delete规定逻辑关联删除动作...,models.DO_NOTHING关联无动作 三.以外字段关联 1)断关联,删除关联表记录,键值置空 db_constraint=False, on_delete=models.SET_NULL...,但关系表一定级联删除 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中基表的设置 通过图书管理系统引入多表操作:如果我们创建表的方式是先抽象出表与表之间相同的字段建一个父类,然后在用每个表类去继承这个父类,如下面的代码,我们将无法得到期望的表字段。...当然如果指定也没关系,Django会自动默认的按照一定规则生成数据模型对应的数据库表名。关于Django Meta的详细讲解可以参考该博客。...,作者详情一定没有 DO_NOTHING:不会被级联,假设A表依赖B表,B记录删除,A表的字段不做任何处理 例子:作者被删了,作者的书还存在,书还是该作者写的;出版社没了,出版社出版的书还在...SET_DEFAULT:假设A表依赖B表,B记录删除,A表的字段重置为default属性设置的值,所以必须配合default属性使用。...子序列化的使用方法及注意事项: 1)只能在序列化中使用 2)字段名必须是(正向反向都可以)字段,相对于自定义序列化外字段,自定义序列化字段不能参与反序列化,子序列化必须为键名,子序列化字段写入数据库

    4.3K30

    Django模型

    django会为表创建自动增长的主键,每个模型只能有一个主键,如果使用选项设置某属性为主键django不会再创建自动增长的主键。...默认创建的主键属性为id,也可以使用pk,意为primary key. 字段名称中不能出现双下划线,因为这是Django的查询语法之一。...下面是Django中常用的字段类型的详情 字段类型 类型 说明 BigAutoField 自动增长的BigIntegerField,通常不用指定,指定时Django会自动创建属性名为id的自动增长属性... 这个东西,通常都是在业务逻辑层面来实现的,不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的约束。在这里只是简单的介绍一下。...它的常用值可以如下: CASCADE级联,删除主表数据时连通一起删除表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL设置为NULL

    1.9K20

    Web | Django 与数据库交互,你需要知道的 9 个技巧

    索引(FK Indexes) 创建模型时,Django 会在所有创建一个 B-Tree 索引,它的开销可能相当大,而且有时候并不很必要。...从第一层的树叶为第二层创建一棵新树,以此类推。 索引中的顺序非常重要。 在上面的例子中,我们首先会得到一个组(group)的树,另一个树是所有它的用户(user)。...从 Django 1.11 开始,有一个新的 Meta 选项用于在模型上创建索引。这给了我们探索其他类型索引的机会。 PostgreSQL 有一个非常有用的索引类型 BRIN(块范围索引)。...假设我们在一中有这些值,每一个都是一个块: 1, 2, 3, 4, 5, 6, 7, 8, 9 我们为每三个相邻的块创建一个范围: [1,2,3], [4,5,6], [7,8,9] 对于每个范围,我们将保存范围内的最小值和最大值...创建索引时要考虑的要比索引的大小要多得多。但是现在,通过 Django 1.11 支持索引,我们可以轻松地将新类型的索引整合到我们的应用程序中,使它们更轻,更快。

    2.8K40

    Django 2.0 新特性 转

    Django 1.11.x是支持Python2.7的最后版本。 二、2.0新特性 1.简化了URL路由语法 django.urls.path()方法的语法更简单了。...以前版本的django.conf.urls.url()方法变成了django.urls.re_path(),但为了向后兼容,旧的依然保留,不是立刻废弃。...4.小特性 django.contrib.admin后台 新的ModelAdmin.autocomplete_fields属性和ModelAdmin.get_autocomplete_fields()方法现在可以在外和多对多字段上使用...某些地方删除对bytestrings的支持 例如,对于reverse(),现在使用str()代替force_text()。 2....SQLite现在支持约束 另外,Django2.0还废弃和移除了一些方法和属性。 总结: 好像也没多大变化,不是重度使用者,基本感受不出变化来,该怎么用还是怎么用,^-^!

    2.6K20

    Sentry 开发者贡献指南 - 数据库迁移

    目录 命令 将您的数据库升级到最新 将您的数据库移动到特定的迁移 为迁移生成 SQL 生成迁移 将迁移合并到 master 指南 过滤器 索引 删除/表 重命名表 添加添加 NOT...最后,创建一个删除的迁移。 这是删除已经可以为空的的示例。首先我们从模型中删除,然后修改迁移以仅更新状态不进行数据库操作。...在这种情况下,首先删除其他表中的,然后返回到此步骤。 通过在列上设置 db_constraint=False,删除此表到其他表的任何数据库级约束。...接下来,我们需要删除和 db 级约束。... 创建大多没问题,但是对于像 Project、Group 这样的大/繁忙的表,由于获取锁的困难,它可能会导致问题。您仍然可以创建 Django 级别的,而无需创建数据库约束。

    3.6K20

    Django—入门

    Django1.11文档   https://docs.djangoproject.com/en/1.11/ 1.搭建环境 安装Django包(我用的1.11.11) 2.创建项目 创建图书管理项目...同时我们发现多了一个id项,这一项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键,并且主键自动增长。...在我们之后迁移生成表的时候,Django框架就会自动帮我们在图书表和英雄表之间建立一个关系。 最后我们可以看到数据库中生成的英雄表如下图: ?...在列表页中点击某行的第一可以进入修改页。 ? 按照提示进行内容的修改,修改成功后进入列表页。在修改页点击“删除”可以删除一项。 删除:在列表页勾选想要删除的复选框,可以删除多项。 ?...之后会写反向解析,这里先写了: from django.conf.urls import url from django.contrib import admin from booktest.views

    1.9K10

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

    2) 关于主键 django会为表创建自动增长的主键,每个模型只能有一个主键,如果使用选项设置某属性为主键django不会再创建自动增长的主键。...默认创建的主键属性为id,可以使用pk代替,pk全拼为primary key。 3) 属性命名限制 不能是python的保留关键字。 不允许使用连续的下划线,这是由django的查询方式决定的。...默认值是False,一般作为AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False null是数据库范畴的概念,blank是表单验证范畴的 6) ...在设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE级联,删除主表数据时连通一起删除表中数据...PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL设置为NULL,仅在该字段null=True允许为null时可用 SET_DEFAULT

    1.4K20

    django_mysql_配置

    verbose_name='描述信息') hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # ...2) django会为表创建自动增长的主键,每个模型只能有一个主键,如果使用选项设置某属性为主键django不会再创建自动增长的主键。...默认创建的主键属性为id,可以使用pk代替,pk全拼为primary key。 3) 字段类型 ? 4) 选项 ?...null是数据库范畴的概念,blank是表单验证范畴的 5) 一般我用CASCADE 在设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,在django.db.models...中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL

    1.6K10

    django 引用自身和on_delete参数

    如果对应的那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了的那条数据,那么就不能删除的那条数据。如果我们强行删除Django就会报错。...如果的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。如果设置这个选项,== 前提是要指定这个字段一个默认值 ==。 SET():如果的那条数据被删除了。...、update的时候,子表会将关联记录的字段所在设为null,所以注意在设计子表时不能设为not null; 为什么在django中可以是用不同的约束去操作数据库呢。...比如 django 中 on_delete=CASCADE, 但是数据库的约束是RESTRICT....在进行删除A表数据时,发现被约束着,使数据不能被删除,则django会先去删除约束的B表数据,然后再来删除A表数据。

    1.3K20

    Mysql基础

    创建 --- 每一个班主任会对应多个学生 , 每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY...,可是 alvin3显示还是有班主任id=1的冰冰的; -----------增加删除--------- ALTER TABLE student ADD CONSTRAINT abc...: 如果在父表中找不到候选,则不允许在子表上进行insert/update --约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对...--------------------------------- -----cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 -----的级联删除...ON DELETE CASCADE ------set null方式 在父表上update/delete记录时,将子表上匹配记录的设为null -- 要注意子表的不能为not null

    4.2K20

    Django 1.10中文文档-第一个应用Part7-自定义管理站点

    Django在admin站点中,自动地将所有的关系展示为一个select框。在我们的例子中,目前只有一个question对象存在。 请注意图中的绿色加号,它连接到Question模型。...每一个包含关系的对象都会有这个绿色加号。点击它,会弹出一个新增Question的表单,类似Question自己的添加表单。...填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice的关联对象。通俗讲就是,新建一个Question并作为当前Choice的。...但是,实话说,这种创建方式的效率不怎么样。如果在创建Question对象的时候就可以直接添加一些Choice,那样操作将会变得简单些。 删除Choice模型对register()方法的调用。...但是建议这样!最好每一个模板都应该存放在它所属应用的模板目录内(例如polls/templates)不是整个项目的模板目录(templates),因为这样每个应用才可以被方便和正确的重用。

    3.6K60

    Django中ORM操作

    1、无需连表查询性能低,省硬盘空间(选项固定时用) 2、在modle文件里不能动态增加(选项一成不变用Django的choice) 其他字段 db_index = True 表示设置索引 unique...id的 from django.db import models class UserInfo(models.Model): # 自动创建一个列名为...__,反向是小写的表名 UserInfo.objects.values_list('nid','ug_id','ug__title') 反向连表: 反向操作无非2种方式: 1、通过对象的形式反向跨表...().first() result = obj.userinfo_set.all() [userinfo对象,userinfo对象,] 小写的表名 得到有关系的 #因为使用values取值取得是字典的不是对象...','小写的表名称') v = UserGroup.objects.values('id','title','小写的表名称__age') 小写的表名 得到有关系的 v = UserGroup.objects.values_list

    4.8K10

    博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法

    之前就有人一直催我把博客的 Django 升级到 Django 2.0 以上,但是我一直懒得升级,因为我早就看过 Django 2.x 版本和 1.11.x 版本,其实没有太多的不同,所以没有找到需要升级的必要...重装所有依赖库 为了升级 django 到 2.0 以上的版本,需要配套升级其他的依赖组件,所以需要把当前项目下面的 requirements.txt 文件里面依赖的版本号全部删除,然后重新创建一个虚拟环境...init__() missing 1 required positional argument: 'on_delete' 报错的原因其实一看就能知道,这个地方是说的关于一些模型在一对一关联和一对多关联(...规避方法 把项目中所有模型中有的字段都添加这个属性,添加的时候需要根据实际情况设定值。...migrate 报错 由于 django 2.2+ 的 auth 应用中的数据库迁移文件比 1.11+ 的版本多了几个,所以按理需要把这几个迁移文件添加到数据库中,但是由于我添加了 oauth 应用,这个应用必须依赖

    96720

    django自定义非主键自增字段类型详解(auto increment field)

    key)” # (primary key)也是(key)的一种,key还包括(foreign key)、唯一(unique key) errors.extend(self....limit_choices_to=lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root') db_constraint=True # 是否在数据库中创建约束...一对一其实就是 一对多 + 唯一索引 # 2.当两个类之间有继承关系时,默认会创建一个一对一字段 # 如下会在A表中额外增加一个c_ptr_id且唯一: class C(models.Model):...membership_invites", ) invite_reason = models.CharField(max_length=64) db_constraint=True, # 是否在数据库中创建约束...db_table=None, # 默认创建第三张表时,数据库中表的名称 ForeignKey(跨表操作): 跨表操作1 v = models.Host.objects.filter(nid__

    2.3K10
    领券