对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的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
python使用多进程的实例详解
Sep 19 Python
详解django自定义中间件处理
Nov 21 Python
Python实现Selenium自动化Page模式
Jul 14 Python
Python selenium的基本使用方法分析
Dec 21 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python爬虫框架feapde的使用简介
Apr 20 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生成器简单实例
2015/05/13 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
一个超级简单的python web程序
2014/09/11 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
详解K-means算法在Python中的实现
2017/12/05 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
学习全国两会精神心得体会范文
2014/03/17 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
复活读书笔记
2015/06/29 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
欧元符号 €
2022/02/17 杂记
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android