对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最基本的输入输出详解
Apr 25 Python
Python实现数据库编程方法详解
Jun 09 Python
Python ftp上传文件
Feb 13 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
python实现转圈打印矩阵
Mar 02 Python
python算法题 链表反转详解
Jul 02 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python实现邮件发送功能
Aug 10 Python
python返回数组的索引实例
Nov 28 Python
Python 实现RSA加解密文本文件
Dec 30 Python
浅析Python实现DFA算法
Jun 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 checkbox 取值详细说明
2010/08/19 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
AURALog面试题软件测试方面
2013/10/22 面试题
路政管理专业推荐信
2013/11/11 职场文书
电工技术比武方案
2014/05/11 职场文书
读书之星事迹材料
2014/05/12 职场文书
自主招生学校推荐信
2014/09/26 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
青年教师听课心得体会
2016/01/15 职场文书
创业计划书之校园超市
2019/09/12 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python