对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

标签:django,models,ForeignKey,外键
0
投稿

猜你喜欢

  • JSP组件commons-fileupload实现文件上传

    2023-07-03 03:16:01
  • SQL2005 服务器因重装改名后出错的说明

    2024-01-23 09:31:22
  • Centos6.9安装Mysql5.7.18步骤记录

    2024-01-25 20:24:06
  • 61条面向对象设计的经验原则

    2008-05-08 13:05:00
  • 如何应对SQL Server数据库崩溃

    2008-11-24 17:25:00
  • 什么是XML

    2008-09-05 17:21:00
  • 简单仿LightBox效果

    2008-09-19 21:35:00
  • SQL Server中读取XML文件的简单做法

    2008-12-23 15:29:00
  • python爬虫框架Scrapy基本应用学习教程

    2021-04-05 13:09:44
  • Python3读取文件常用方法实例分析

    2023-07-07 16:13:43
  • 科讯商业版中用到的ajax空间与分页函数

    2024-04-17 10:05:45
  • 关于golang中平行赋值浅析

    2024-05-05 09:33:42
  • Python 删除连续出现的指定字符的实例

    2023-11-21 08:36:15
  • 黑客谈 MSSQL SA权限入侵的感悟

    2008-03-20 10:18:00
  • python使用matplotlib绘制雷达图

    2022-10-10 16:37:41
  • Python 多线程处理任务实例

    2021-06-25 04:50:05
  • 建立合理的索引提高SQL Server的性能

    2009-01-23 14:44:00
  • 一文读懂python Scrapy爬虫框架

    2021-01-31 10:08:31
  • SQL 语句中的通配符

    2007-10-11 18:03:00
  • js表单提交显示进度条

    2007-09-18 13:10:00
  • asp之家 网络编程 m.aspxhome.com