对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实现文件分组复制到不同目录的例子
Jun 04 Python
python修改字典内key对应值的方法
Jul 11 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
python实现壁纸批量下载代码实例
Jan 25 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
通过python检测字符串的字母
Feb 18 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
pytorch实现手写数字图片识别
May 20 Python
Python基础之变量的相关知识总结
Jun 23 Python
Python使用pyecharts控件绘制图表
Jun 05 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
BBS(php & mysql)完整版(八)
2006/10/09 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
preg_match_all使用心得分享
2014/01/31 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php英文单词统计器
2016/06/23 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python批量修改xml属性的实现方式
2020/03/05 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
考试作弊检讨书怎么写?
2014/12/21 职场文书
丧事答谢词大全
2015/09/30 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
React更新渲染原理深入分析
2022/12/24 Javascript