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


Posted in Python onMarch 30, 2020

下面是代码

class GroupInfos(models.Model):
 uid = models.AutoField(primary_key=True)
 caption = models.CharField(max_length=32, unique=True)
 ctime = models.DateTimeField(auto_now_add=True, null=True)
 uptime = models.DateTimeField(auto_now=True, null=True)

class UserInfos(models.Model):
 username = models.CharField(max_length=32, blank=True, verbose_name='用户名')
 password = models.CharField(max_length=64, help_text='text')
 email = models.EmailField(max_length=60)
 user_group = models.ForeignKey('GroupInfos', to_field='uid', on_delete='CASCADE')

说明

第一个class创建一个名称为app_groupinfos的表

第二个class创建一个名称为app_userinfos的表

1、ForeignKey 表示设置外健

2、to_field表示外健关联的主键

3、on_delete有多个选项

在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:

TypeError: init() missing 1 required positional argument: ‘on_delete'

举例说明:

user=models.OneToOneField(User)
owner=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:此值设置,是级联删除。

PROTECT:此值设置,是会报完整性错误。

SET_NULL:此值设置,会把外键设置为null,前提是允许为null。

SET_DEFAULT:此值设置,会把设置为外键的默认值。

SET():此值设置,会调用外面的值,可以是一个函数。

一般情况下使用CASCADE就可以了。

那么,这个时候一个group就会对应多个user,属于一对多的类型。

当我们查询一个组有那些用户的时候,就会用到当前的外健,

创建记录

并且,在class中定义了foreignKey之后,group还不存在的同时,user表也因为约束的原因,不能被进行创建

删除记录

并且,在class中定义了foreignKey之后,user中记录存在的同时,group表中的记录也因为约束的原因,不能被进行删除

补充知识:owner = models.ForeignKey(User)出现TypeError

owner = models.ForeignKey(User)出现错误 TypeError: init() missing 1 required positional argument: ‘on_delete'
owner = models.ForeignKey(User)

出现下列错误:

TypeError: __init__() missing 1 required positional argument: 'on_delete'

解决办法:

owner = models.ForeignKey(User, on_delete=models.CASCADE)

以上这篇对django 2.x版本中models.ForeignKey()外键说明介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
python导入时小括号大作用
Jan 10 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Django 路由层URLconf的实现
Dec 30 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python字符串格式化f-string多种功能实现
May 07 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 Python
Python可视化神器pyecharts绘制水球图
Jul 07 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 #Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 #Python
django 扩展user用户字段inlines方式
Mar 30 #Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 #Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 #Python
Python2 与Python3的版本区别实例分析
Mar 30 #Python
django xadmin中form_layout添加字段显示方式
Mar 30 #Python
You might like
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
php实现用户登陆简单实例
2017/04/04 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
Python解析nginx日志文件
2015/05/11 Python
python编写爬虫小程序
2015/05/14 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
python 自动批量打开网页的示例
2019/02/21 Python
Python递归函数实例讲解
2019/02/27 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
行政管理人员精品工作推荐信
2013/11/04 职场文书
家教广告词
2014/03/19 职场文书
感恩节活动策划方案
2014/05/16 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
培训计划通知
2015/07/15 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android