Django请求生命周期流程图与ORM表关系


Django请求生命周期流程图与ORM表关系

一、ORM表关系

  1. 关系型数据库的表与表之间往往存在一定的关系,由于Django的模型是数据库表与Python类之间的映射,因此Django提供了3种最常用的数据库表之间关系的支持:一对多、一对一、多对多

  2. 表之间的关系都是通过外键来进行关联的

1.三种对应关系


1.1 一对多
  • 一对多关系:一张数据库表中的一条记录与另一张数据库表中的多条记录相对应

  • Django实现方式:通过ForeignKey来实现的

1.2 一对一
  • 一张表的一条记录一定只能与另外一张表的一条记录进行对应。

  • Django实现方式:在Django中一对一是通过models.OneToOneField来实现的。这个OneToOneField其实本质上就是一个外键,只不过这个外键有一个唯一约束(unique key),来实现一对一。

1.3 多对多
  • 一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录

  • Django实现方式:Django为这种多对多的实现提供了专门的Field。叫做ManyToManyField

2.表关系判断


  • 得出表关系结论需要双向进行观察对比(换位思考)

3.表关系举例


  • 书籍表 : books
  • 出版社表 : publish
  • 作者表 : author
  • 作者介绍表 : author_info
  • 一本书可以对用多位作者, 一位作者可以对应多本书 (多对多)

  • 一本书只能有一个出版社, 一个出版社可以出版多本书 (一对多)

  • 一位作者对应一个作者简介,一个作者简介对应一位作者 (一对一)

4.ORM 针对外键字段的创建位置


  • 一对一:建在任何一方都可以, 但是推荐建在查询频率较高的表中
  • 一对多:推荐建在多的一方
  • 多对多
  1. 手动创建
  2. 在ORM中,建在任何一方都可以, 但是推荐建立在查询频率较高的表中

5.创建外键示例

  • models.py 文件
# 书籍表
class Book(models.Model):
    # 不创建主键,orm会自动帮你创建
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places)  # 最大位数8位,小数点占两位
    # 建立出版社外键, 默认就是 Publish 表的主键, 并且自动在外键字段后面加上"_id"后缀
    publish = models.ForeignKey(to='Publish') 
    # 建立作者外键, 自动帮你创建book与author的中间表, 虚拟的字段并不会在表中实例化出来, 只是告诉ORM创建第三张关系表
    authors = models.MaryToMaryField(to='Author')
    
# 出版社表
class Publish(models.Model):
    title = models.CharField(max_length=32)
    email = models.EmailField()
    
# 作者表
class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    # 建立作者简介外键
    author_info = models.OneToOneField(to='Author_info')
    
# 作者简介表
class Author_info(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=128)

更多参考简书

程序员大本营

二、Django生命请求周期流程图

image-20210316190302448

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾维斯Echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值