对django 2.x版本中models.ForeignKey()外键说明介绍
作者:亦非我所愿丶 发布时间:2022-10-07 18:18:24
下面是代码
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)
来源:https://blog.csdn.net/wanglei_storage/article/details/84037315
猜你喜欢
- 安装好mysql后,在终端输入 mysql -u root -p 按回车,输入密码后提示access denied......ues pas
- 某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。准备爬的历
- Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)
- 概述最近在一家公司实习,入职第一个大一点的需求是将公司开发的两个winstore app的排名信息进行可视化。大概挑选了下,排除了Flask
- 前言2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,
- 这两天在搞Theano,要把mat文件转成pickle格式载入Python。Matlab是把一维数组当做n*1的矩阵的,但Numpy里还是有
- 一、业务需求在使用Python进行业务开发的时候,需要将一些数据保存到本地文件存储,方便后面进行数据分析展示。二、需求分析通过查看需求可得出
- 目录一,python介绍二.python的安装程序三、变量python基础部分学习一,python介绍python的创始人为吉多·范罗苏姆(
- 本文实例讲述了Django实现简单分页功能的方法。分享给大家供大家参考,具体如下:使用django的第三方模块django-pure-pag
- 前言:大家一般都知道subplot可以画子图,但是subplots也可以画子图,鉴于subplots介绍比较少,这里做一个对比,两者没有功能
- 一、使用loadVariables 一个例子简单的描述了如何通过GET方法向服务器端的ASP发送请求: _root. pushAc
- 一、Tornado简介Tornado是一个使用Python编写的高效、非阻塞的web服务器软件和网络库。它被设计用于处理数以千计的并发连接,
- 目录0x01 字符串(string)引号转义拼接字符串长字符串索引( indexing)运算符in创建列表切片赋值0x02 字符串格式化模板
- 创作背景最近本人在 PyCharm 的虚拟环境安装第三方库的时候报了错,说 no such option: --bulid-dir ,如下图
- 阅读上一篇:css基础教程属性篇 本篇主要介绍css对边框(border)的属性控制和链接(link)的伪类选择器.边框(border):
- 下次用python画图的时候选色选点都可以直接参考这边,牛逼!分享给大家,也给自己留个笔记。参考网址:http://stackoverflo
- 一、powershell中 python创建虚拟环境无法激活 二、管理员模式运行powershell,执行策略更改: S
- 1、捕获摄像头和实时显示import cv2import numpy as npimport pickleimport matplotlib
- 本文实例讲述了pymongo实现多结果进行多列排序的方法。分享给大家供大家参考。具体分析如下:这里多列排序即指定多个排序字段。集合查询结果排
- 利用sklearn画出决策树并保存为PDF下载Graphviz进入官网下载并安装:https://graphviz.gitlab.io/_p