Django 表关系的创建

我们知道,表关系分为一对多,多对多,一对一

我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系

Book与Publish表

找关系:一对多

左表(Book)<------------------------------->右表(Publish)

# 步骤一:
#分析1、先站在左表的角度
左表的多条记录代表多本书籍,右表的一条记录代表一个出版社,多本书籍对应同一个出版社 ✔️ #分析2、再站在右表的角度去找
右表的多条记录代表多个出版社,左表的一条记录代表一本书,多个出版社不能出版同一本书 ✘ # 步骤二:后确定关系
# 一对多
左表多对一右表,关联字段应该创建在BOOk表中,然后foreign key 右表

Book与Author表

关系:多对多

两者之间是多对多的外键关系,需要创建一张单独的新表来专门存放二者的关系,外键字段推荐建在查询频率较高的那种表中

Author表与AuthorDetail表

关系:一对一

作者与作者详情是一对一的外键关系,外键字段推荐建在查询频率较高的那种表中

class Book(models.Model):
# 因为id是自动创建,所以可以不写
title =models.CharField(max_length=64)
#price为小数字段,总共8位数,小数位占2位
price = models.DecimalField(max_digits=8,decimal_places=2) # 书籍与出版社 是一对多外键关系
publish = models.ForeignKey(to='Publish') # 默认关联字段就是出版社表的主键字段
# publish = models.ForeignKey(to=Publish)
# to后面也可以直接写表的变量名 但是需要保证该变量名在当前位置的上方出现 # 书籍与作者 是多对多外键关系
authors = models.ManyToManyField(to='Author')
"""
authors字段是一个虚拟字段 不会真正的在表中创建出来
只是用来告诉django orm 需要创建书籍和作者的第三张关系表
""" class Publish(models.Model):
name = models.CharField(max_length=64)
addr = models.CharField(max_length=64) class Author(models.Model):
name =models.CharField(max_length=32)
phone = models.BigIntegerField()
# 一对一外键关系建立
author_detail = models.OneToOneField(to='AuthorDetail') class AuthorDetail(models.Model):
age = models.IntegerField()
addr = models.CharField(max_length=255)

注意:"""
    ForeignKey字段以及OneToOneField字段 在创建表的时候orm都会自动给该字段加_id的后缀
    无论自己有没有加
   """

多对多关联关系的三种方式

方式一:全自动创建第三张表

 方式二:纯手动创建(了解)

 方式三:半自动创建(推荐)

django请求生命周期流程图

Django 表关系的创建的更多相关文章

  1. Django 表关系

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义2.order_by asc desc 1. 表关系的创建- OneToOne student = ...

  2. Django中ORM创建表关系

    一:django中ORM创建表关系 ORM创建外键关系 1.表与表之间的关系 1.表与表之间的关系 一对多 一对一 多对多 2.操作目标条件: 图书表 出版社表 作者表 作者详情表 3.外键关联 一对 ...

  3. Django——7 常用的查询 常用的模型字段类型 Field的常用参数 表关系的实现

    Django 常用的查询 常用的查询方法 常用的查询条件 常用字段映射关系 Field常用参数 表关系的实现 查用的查询方法 这是需要用到的数据 from django.http import Htt ...

  4. django模型层之多表关系

    一. 多表操作 数据库表关系之关联字段与外键约束 一对多 book(多) publish(一) 查询<<水浒传>>这本书出版社的地址: select publish_id fr ...

  5. Django创建多对多表关系的三种方式

    方式一:全自动(不推荐) 优点:django orm会自动创建第三张表 缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差 class Book(models.Model): # ... ...

  6. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  7. (33)关于django中路由自带的admin + 建表关系的讲解

    admin是django自带的后台管理,在初始的时候就默认配置好了 当输入ip地址的时候后面跟admin,就会登陆管理员的后台,这个是django自带的,可以快速管理数据表(增删改查) PS:ip地址 ...

  8. 5.Django|模型层--多表关系

    多表操作 文件为 ---->  orm2 数据库表关系之关联字段与外键约束 一对多Book id title price publish email addr php 人民出版社 北京 pyth ...

  9. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

随机推荐

  1. Mesh R-CNN 论文翻译(原理部分)

    毕设做Mesh R-CNN的实现,在此翻译一下原论文.原论文https://arxiv.org/pdf/1906.02739.pdf. 摘要 二维感知的快速发展使得系统能够准确地检测真实世界图像中的物 ...

  2. linux下的特殊模式

    单用户模式 ubuntu 16.04 单用户操作 1.重启操作系统,BIOS引导过后一直按住shift,出现GUN Grub菜单: 2.选择Advanced options for Ubuntu选项回 ...

  3. 使用vscode进行远程开发

    1.前置条件,安装SSH客户端.OpenSSH或者Git两者任选其一即可,本文使用的是Git 2.安装 Remote Development 扩展包 官方地址为:https://marketplace ...

  4. 《算法九》(A星寻路算法)

    A星寻路: 结构:N叉树 直线代价斜线代价:符合勾股定理 代价:每走一步,距离终点所付出的 计算公式:f = g + h + w; f : 当前点到终点的代价 g : 起点到当前点的代价 h : 当前 ...

  5. centos 配置自动启动(nginx为例)

    [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin ...

  6. ant编译solr源码生成eclipse项目,解决一直resolve,一直[ivy:retrieve]的问题

    这两天在学习solr,结果刚到编译solr源码就卡住了,足足卡了两天,网上找各种解决办法都是简单带过,说是缺少jar包,下载下来放到对应位置就好了....对应位置???咋不说这个问题用相应方法解决即可 ...

  7. CSS实现按钮点击后根据背景色加深效果-一颗优雅草bigniu

    具体代码如下 button{ position: relative; } button:active::before { display: block; content: ''; position: ...

  8. postman之设置关联

    接口关联(上一个接口的返回参数作为下一个接口的入参使用): 一:在第一个接口的test点击Response body:JSON value check和set an environment varia ...

  9. 动手学习Pytorch(7)--LeNet

    Convolutional Neural Networks 使用全连接层的局限性: 图像在同一列邻近的像素在这个向量中可能相距较远.它们构成的模式可能难以被模型识别. 对于大尺寸的输入图像,使用全连接 ...

  10. this的使用情况

    this的几种使用情况 1.在普通函数内部,this指向的是window,在严格模式下,this的值是undefined function fun(){ console.log(this); } fu ...