对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+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python理解递归的方法总结
Jan 28 Python
python turtle库画一个方格和圆实例
Jun 27 Python
python 实现单通道转3通道
Dec 03 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Python3 webservice接口测试代码详解
Jun 23 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
python3实现无权最短路径的方法
May 12 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面向对象分析设计的经验原则
2008/09/20 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
Vue实现手机计算器
2020/08/17 Javascript
Python进阶之递归函数的用法及其示例
2018/01/31 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
如何安装ruby on rails
2014/02/09 面试题
港澳通行证委托书怎么写
2014/08/02 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
检讨书大全
2015/01/27 职场文书
催款律师函范文
2015/05/27 职场文书
《风筝》教学反思
2016/02/23 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS