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

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

场景 我们用DjangoModel时,有时候需要关联外键。关联外键时,参数:on_delete几个配置选项到底是干嘛呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束行为,在删除此条数据时,同事删除外键关联对象。...比如:用户有一个外键关联是用户健康记录表,当用户删除时,配置了这个参数健康记录表中跟这个用户有关数据也会被删除。...提醒:级联删除不会调用model级行为,但是会为所有已删除对象发送pre_delete和 post_delete信号,有用Django信号机制场景,要考虑这个级联删除带来影响。...欢迎查看我这个系列其他文章: django-admin和manage.py用法[1] 编写自定义manage.py 命令[2] Django组件——forms组件[3] 还有更多内容,请查看Bigyoung

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

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

gohlke/pythonlibs/#mysqlclient 如果是 linux 系统,也可能出现问题,大概是缺少 MySQL 依赖,这个需要根据具体系统版本去网上搜索依赖自行试试。...pymysql pymysql.install_as_MySQLdb() 关于 on_delete 参数报错 报错现象 class Article(models.Model): File...' 报错原因其实一看就能知道,这个地方是说关于一些模型在一对一关联和一对多关联(外键)时候需要指定 on_delete 参数才行,多对多没有这个设置。...因为在 Django 1.x 版本中,这个参数是有默认值,但是 Django 2.x 没有指定,所以需要显示设定一个值。...报错分析,这个是 django 2.x 里面会出现问题,当 urls.py 里面使用 include 时候,当有 namespace 参数时候,第一个参数需要添加成元组,其中第二个参数是 app_name

92320

探索 PythonDjango 支持分布式多租户数据库,如 Postgres+Citus

在 Citus 中分发数据 将 Django 应用程序更新为范围查询 使用中间件自动化 更多 在 确定分布策略 中,我们讨论了在多租户用例中使用 Citus 所需与框架无关数据库更改。...将租户列介绍给我们想要分发缺少模型 更改分布式表主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...为了能够扩展 django,必须对模型进行一些简单更改。...最后你模型应该是这样: from django.db import models from django_multitenant.fields import TenantForeignKey from...有关更多示例,请参阅 django-multitenant 中 README。

2K10

django数据库迁移时候异常

django数据库迁移时候异常 一.错误信息 Django在根据models生成数据库表时报 init() missing 1 required positional argument: 'on_delete...' 二.原因 在django2.0后,定义外键和一对一关系时候需要加on_delete选项,此参数为了避免两个表里数据不一致问题,不然会报错: TypeError: init() missing...=models.ForeignKey(UserProfile) 需要改成: user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数...(models.CASCADE)是默认值 owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE...)是默认值 参数说明: on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择值 CASCADE:此值设置,是级联删除。

48520

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

默认最大长度为 100,当可通过 max_length 参数自定义。它包含几个重要参数: path:必传参数。记录目录或者文件绝对路径。...2.1 ForeignKey 1) on_deleteDjango 2.0 中,设置外键时需要添加一个 on_delete选项。外键本身涉及到两个表数据,况且外键在数据库中是有约束行为。...所以 on_delete 参数Django 模拟 SQL 约束行为。 on_delete 有几个可选值: CASCADE:这就是默认选项,级联删除,你无需显性指定它。...2)limit_choices_to 该参数用于限制外键所能关联对象,只能用于 Django ModelForm(Django表单模块)和 admin 后台,对其它场合无限制功能。...对于每一个字段类型,除了 ForeignKey、ManyToManyField和 OneToOneField 这三个特殊关系类型,其第一可选位置参数都是 verbose_name。

2K30

DjangoAutoField字段使用

如果当前网站用Django开发,我想就不会有这种事情发生了吧。...补充知识:Django中models下常用Field以及字段参数 一、常见FieldType数据库字段类型 1、AutoField:自增Field域,自动增加一个数据库字段类型,例如id字段就可以使用该数据类型...Django Admin以及ModelForm中提供验证机制 11、FileField:存储文件类型数据,文件上传到指定目录 –参数:upload_to=”….”...表名_set” 4、on_delete:当删除关联表中数据时,当前表与其关联行为,例如删除一个出版社,那么和这个出版社有关联书籍也都被删除掉了,下面介绍on_delete参数值: on_delete...:删除关联数据,引发错误ProtectedError on_delete=models.SET_NULL:删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空) on_delete=models.SET_DEFAULT

6.4K20

Django——模型Model

OK Django默认采用sqlite3数据库,最终会生成如下数据表,其中自定义表命名规则是(应用名称模型类名) DATABASES = { 'default...=models.DO_NOTHING) django 升级到2.0之后,表与表之间关联时候,必须要写on_delete参数,否则会报异常: TypeError: init() missing 1 required...positional argument: 'on_delete' on_delete参数各个值含义: on_delete=None, # 删除关联表中数据时,当前表与其关联...field行为 on_delete=models.CASCADE, # 删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做..., blank=True, null=True) on_delete=models.SET_NULL, # 删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空,一对一同理) #

70250

Django官方文档小结(一) -- Models模型

Django 关系字段 本文主要内容是关于Django框架中models知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...models.IntegerField() rating = models.IntegerField() def __str__(self): return self.headline #2.1 参数...models.ForeignKey(to,on_delete,** options) # to : 关联类(必填) # on_delete : 与"关联表"关系(必填) #2.2 自关联 models.ForeignKey...(to='self', on_delete=models.CASCADE) #2.3 关联关系 on_delete=None, # 删除关联表中数据时,当前表与其关联field...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) #2.4 数据库表示 在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column

75820

python测试开发django-rest-framework-93.联合唯一校验

但是同一个人针对同一个商品,只能收藏一次,于是可以用UniqueTogetherValidator联合唯一校验 收藏商品 添加商品和收藏商品 models.py 模型设计 from django.db...import models from django.contrib.auth.models import User # Create your models here. # 作者-上海悠悠 QQ交流群:...self.goods_code class UserCollect(models.Model): """用户收藏商品""" user = models.ForeignKey(User, on_delete...=models.CASCADE, verbose_name="用户id") goods = models.ForeignKey(Goods, on_delete=models.CASCADE,...它具有两个必需参数和一个可选messages参数: queryset 必需-这是应针对其强制执行唯一性查询集。 fields 必填-字段名称列表或元组,应组成唯一集合。

89530

完美解决Django2.0中models下ForeignKey()问题

Django2.0中编写models类下ForeignKey book = models.ForeignKey(‘BookInfo’) django2.0与之前1.8不同, 错误: book...= models.ForeignKey(‘BookInfo’) TypeError: __init__() missing 1 required positional argument: ‘on_delete...’ 解决方法: book = models.ForeignKey(‘BookInfo’, on_delete=models.CASCADE,) 加上on_delete参数就可以了!!!...补充知识:Django ForeignKey ondelete CASCADE:删除一并删除关联表下所有的信息; PROTECT:删除信息时,采取保护机制,抛出错误:即不删除关联表内容; SET_NULL...以上这篇完美解决Django2.0中models下ForeignKey()问题就是小编分享给大家全部内容了,希望能给大家一个参考。

77910

基于Django OneToOneField和ForeignKey区别详解

对于每个ForeignKey,我们需要给出关联模型和on_delete响应选项,即 manufacturer = models.ForeignKey( 'Manufacturer', on_delete...', on_delete=models.CASCADE) class Meta: abstract = True ForeignKey还有如下参数可以选择: 参数 功能 limit_choices_to...ManyToManyField类有两个经常使用参数:through和through_fields,通过这两个参数可以十分方便地建立中间项关联,如示例代码所示: from django.db import...ManyToManyField还有以下参数可以选择: 参数 功能 related_name 同ForeignKey,可以指定关联类在本类中名称 related_query_name 同ForeignKey..., on_delete=models.CASCADE, related_name='supervisor_of', ) OneToOneField既包含ForeignKey中参数,又包含一个额外参数

2.3K20

Python Django开发 异常及其解决办法(一)

,当前model是修改过,原来migrations已经被删除,但是,重新生成migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字文件都已被记录...: (1193, "Unknown system variable 'storeage_engine'") 即storage_engine参数错误,需要改为default_storage_engine,...这可能是因为所定义某个模型定义了外键,而在新版Django中外键必须指定on_delete属性,例如user = models.ForeignKey(User, verbose_name='用户',...on_delete=models.SET_NULL)此时是因为该属性指定为models.SET_NULL,即在父模型删除数据后,对应子模型记录字段设为空,但是在定义该字段时并未允许该字段为空,因此解决方法有两种...' 这是因为django3及以上版本中已经没有six插件,可以将django降到2版本,也可以将安装six.py复制到django/utils目录下,操作如下: ?

3.1K20

Django ORM (一) 创建数据库

#CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许最大字符数. (2) IntegerField #用于保存一个整数....#它有两个可选参数:height_field和width_field, # 如果提供这两个参数,则图片将按提供高度和宽度规格保存....upload_to 选项,以告诉 Django # 使用 MEDIA_ROOT 哪个子目录保存上传文件.你数据库中要保存只是文件路径(相对于 MEDIA_ROOT)...# 参数 描述 # path 必需参数. 一个目录绝对文件系统路径. FilePathField 据此得到可选项目....Field重要参数 (1) null : 数据库中字段是否可以为空 (2) blank: django Admin 中添加数据时是否可允许空值 (3) default:设定缺省值 (4) editable

1.4K10

django 2.x版本中models.ForeignKey()外键说明介绍

表示外健关联主键 3、on_delete有多个选项 在django2.0后,定义外键和一对一关系时候需要加on_delete选项,此参数为了避免两个表里数据不一致问题,不然会报错: TypeError...) –在老版本这个参数(models.CASCADE)是默认值 owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) –在老版本这个参数...(models.CASCADE)是默认值 参数说明: on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择值 CASCADE:此值设置...当我们查询一个组有那些用户时候,就会用到当前外健, 创建记录 并且,在class中定义了foreignKey之后,group还不存在同时,user表也因为约束原因,不能被进行创建 删除记录 并且...’ 解决办法: owner = models.ForeignKey(User, on_delete=models.CASCADE) 以上这篇对django 2.x版本中models.ForeignKey

1.1K20

Django ForeignKey与数据库FOREIGN KEY约束详解

那么不使用外键约束情况下使用 Django ORM 如何实现关联查询两个表呢?这曾是困扰我很久一个问题,今天终于找到了答案,写出来分享一下。...Django ForeignKey 和数据库 FOREIGN KEY 并不一样。...Django ForeignKey 是一种逻辑上两个表关联关系,可以指定是否使用数据库 FOREIGN KEY 约束。...on_delete 参数默认为 on_delete=models.CASCADE,表示使用数据库级联删除,使用 on_delete=models.SET_NULL 可以使删除 Province 时将关联...`name` = xxx; 补充知识:关于Django模型中中定义auto_now=True 数据库中时间并没有自动更新 djangoorm关于更新数据库方法有update和save两种方法

2.5K10

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

必填参数primary_key=True,则成为数据库主键,无该字段时,django自动创建,一个model不能有两个该字段。...# 要关联表中字段名称 on_delete=None # 当删除关联表中数据时,当前表与其关联行为 - models.CASCADE...=models.CASCADE) p=models.ForeignKey(people,on_delete=models.CASCADE) dt=models.Datefield() 所有参数如下...: OneToOneField() to # 要进行关联表名 to_field=None # 要关联表中字段名称 on_delete...=None # 当删除关联表中数据时,当前表与其关联行为 五、管理员登陆 为了能让大家提前看到django数据操作,django内置了一款非常到位系统管理员登陆设计系统,首先我们创建下用户

2.1K00

django 外键引用自身和on_delete参数

= models.ForeignKey('self',on_delete=models.CASCADE) on_delete参数如下: CASCADE:级联操作。...如果外键对应那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键那条数据,那么就不能删除外键那条数据。如果我们强行删除,Django就会报错。...注意:以上配置都是django级别的,在数据库中级别依旧是RESTRICT 数据库层面的约束有: RESTRICT:默认选项,如果想要删除父表记录时,而在子表中有关联该父表记录,则不允许删除父表中记录...、update时候,子表会将关联记录外键字段所在列设为null,所以注意在设计子表时外键不能设为not null; 为什么在django中可以是用不同约束去操作数据库呢。...比如 djangoon_delete=CASCADE, 但是数据库外键约束是RESTRICT.

1.3K20
领券