对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利用ansible分发处理任务
Aug 04 Python
Python实现二维有序数组查找的方法
Apr 27 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 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开发大型项目的一点经验
2006/10/09 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
php生成略缩图代码
2012/07/16 PHP
php函数与传递参数实例分析
2014/11/15 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python中的colorlog库使用详解
2019/07/05 Python
Python的几种主动结束程序方式
2019/11/22 Python
Python json转字典字符方法实例解析
2020/04/13 Python
python列表的逆序遍历实现
2020/04/20 Python
python中_del_还原数据的方法
2020/12/09 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
十佳青年个人事迹材料
2014/01/28 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
借条如何写
2015/05/26 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript