外键
1、在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。MySQL数据库默认使用的也是InnoDB引擎。
2、外键是相对于主键说的,是建立表之间的联系的必须的前提
3、外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来建立和加强两个表数据之间的连接
4、比如这里有两张,user(用户)表和qx(权限)表,user中gid是用户权限id,而gid是依赖于qx中的id。那么qx中的id就是user的外键。也就是当我们给gid创建一个外键,这个外键就是qx中的id时,gid就必须与qx中id一致,我们可以通过外键使两张表进行关联。
5、MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引
使用外键
1、类定义为class ForeignKey(to,on_delete,**options)
⑴第一个参数是引用的是哪个模型
⑵第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等(外键删除各个参数的意思)
2、这里以一个实际案例来说明。比如有一个User和一个Article两个模型。一个User可以发表多篇文章,一个Article只能有一个Author,并且通过外键进行引用,那么相关的实例代码如下:
例1:
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=100)
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# 是由User影响Article。即Article表中的category列值是根据User表中的id值来的
category = models.ForeignKey('User',on_delete=models.CASCADE)
注:
1、这里我们就在Article中设置了一个外键category
2、以上使用ForeignKey来定义模型之间的关系。即在article的实例中可以通过category属性来操作对应的User模型。这样使用起来非常的方便
3、on_delete参数表示:如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作(这里先大概知道这个参数是干什么的就可以)
4、因为在Django的ORM模型中肯定会有一个id列,因此所有外键默认都是通过id来进行关联的,但是实际中可能用到的不是id,而是id行下面的某一列值
例2:
⑴编辑模型