对django 2.x版本中models.ForeignKey()外键说明介绍

所属分类: 脚本专栏 / python 阅读数: 661
收藏 0 赞 0 分享

下面是代码

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环境管理virtualenv&virtualenvwrapper的配置详解

这篇文章主要介绍了Python环境管理virtualenv&virtualenvwrapper的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

ITK 实现多张图像转成单个nii.gz或mha文件案例

这篇文章主要介绍了ITK 实现多张图像转成单个nii.gz或mha文件案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

.img/.hdr格式转.nii格式的操作

这篇文章主要介绍了.img/.hdr格式转.nii格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

python使用nibabel和sitk读取保存nii.gz文件实例

这篇文章主要介绍了python使用nibabel和sitk读取保存nii.gz文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用ITK-SNAP进行抠图操作并保存mask的实例

这篇文章主要介绍了使用ITK-SNAP进行抠图操作并保存mask的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

基于python实现音乐播放器代码实例

这篇文章主要介绍了基于python实现音乐播放器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Python 存取npy格式数据实例

这篇文章主要介绍了Python 存取npy格式数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Python代码执行时间测量模块timeit用法解析

这篇文章主要介绍了Python代码执行时间测量模块timeit用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

在keras里实现自定义上采样层

这篇文章主要介绍了在keras里实现自定义上采样层,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

用Python开发app后端有优势吗

在本篇文章里小编给大家整理的是关于app后端开发学PHP还是Python的先关问题内容,需要的朋友们可以参考下。
收藏 0 赞 0 分享
查看更多