对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常用模块介绍
Nov 21 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
matplotlib实现区域颜色填充
Mar 18 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python快速排序的实现及运行时间比较
Nov 22 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
使用Python pip怎么升级pip
Aug 11 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
Python中的rfind()方法使用详解
2015/05/19 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
基于python实现坦克大战游戏
2020/10/27 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
花坛标语大全
2014/06/30 职场文书
企业标语大全
2014/07/01 职场文书
个人授权委托书模板
2014/09/14 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
Python进程间的通信之语法学习
2022/04/11 Python