对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中使用itertools模块中的组合函数的教程
Apr 13 Python
python获取当前时间对应unix时间戳的方法
May 15 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
Python程序退出方式小结
Dec 09 Python
Python变量赋值的秘密分享
Apr 03 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
Python魔法方法功能与用法简介
Apr 04 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
Python爬取股票信息,并可视化数据的示例
Sep 26 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中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
有关php运算符的知识大全
2011/11/03 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP解决中文乱码
2017/04/28 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
js中的this关键字详解
2013/09/25 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python颜色随机生成器的实例代码
2020/01/10 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
美容院经理岗位职责
2014/04/03 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
施工现场安全管理制度
2015/08/05 职场文书