多表模型创建分析:
1)作者表:一个作者有姓名和年龄
2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系
3)出版社表: 出版社有对应城市地址和邮箱号
4)书籍表: 包含了书名和价格,还有写这本书有哪些作者,一本书可以有多个作者来写,也可以是一个作者写多本书,所以书籍 和作者是多对多的关系;
一本书对应一个出版社, 一个出版社又可以出多本书, 所以书籍和出版社是一对多的关系
用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
ManyToManyField会自动创建第三张表 *************重点*************
一对一的关系:OneToOneField
一对多的关系:ForeignKey
多对多的关系:ManyToManyField
******************************
在Models创建如下模型:
# 出版社表
class Publish(models.Model):
# id 如果不写,会自动生成,名字叫nid, 并且自增
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
email = models.EmailField() # 作者表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
# 数字类型
sex = models.IntegerField()
# 可以用ForeignKey,但是要设置唯一约束,会报警告,不建议用,建议用OneToOneField
# AuthorDetail= models.ForeignKey(unique=True)
# to ='AuthorDetail' 加了引号,只要 class AuthorDetail 这个表在这个页面上能找到就行,不需要引用,
# to ='AuthorDetail' 如果不加引号,就只能写在这个表的上面创建 class AuthorDetail 这个表,必须在上面定义类
AuthorDetail = models.OneToOneField(to='AuthorDetail', to_field='id') def __str__(self):
return self.name # 作者信息表
class AuthorDetail(models.Model):
id = models.AutoField(primary_key=True)
phone = models.CharField(max_length=32) # 电话
addr = models.CharField(max_length=64) #地址 # 书籍表
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5, decimal_places=2)
publish = models.ForeignKey(to=Publish, to_field='id') # 出版社的关系一对多
# 一对多的关系一旦确立,关联字写在多的一方
author = models.ManyToManyField(to=Author) def __str__(self):
return self.name

注意事项:

写完以上代码后, 在导航栏中找到 Tools ---> Run manage.py Task... 点击后如图:

在里面输入:

  -python3 manage.py makemigrations ------> 只是对数据变更做记录

  -python3 manage.py migrate ------> 把变更的数据同步到数据库

操作完以上步骤后打开mysql数据库刷新即可

Django day08 多表操作 (一) 多表模型创建的更多相关文章

  1. Django day08 多表操作 (二) 添加表记录

    一: 一对多 1. 一对多新增 两种方式:  publish = 对象    publish_id = id 1. publish_id 和 publish 的区别就是: 1)publish_id 可 ...

  2. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  3. Django之model联表:一对多、跨表操作,联表查询

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

  4. Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶

    一.web应用 二.模板的导入与继承 三.静态文件相关 四.inclusion_tag:返回html片段 五.模型层 一.web应用 -s包括两个部分:web服务器+application -目前阶段 ...

  5. 17-2 orm单表操作和多表操作

    参考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一  ORM单表操作 1 增删改查 1. 查询 1. 查所有 models.Publisher. ...

  6. 数据库常用SQL语句(一):常用的数据库、表操作及单表查询语句

    以MySql数据库为例进行说明 1.数据库操作语句 2.表的操作语句 3.表中的字段操作语句 4.MYSQL支持的完整性约束 数据库管理系统提供了一致机制来检查数据库表中的数据是否满足规定的条件,以保 ...

  7. mysql单表操作与多表操作

    0. null和notnull: 使用null的时候: create table t8( id int auto_increment primary key, name varchar(32), em ...

  8. 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析

    4.mybatis中的多表查询     表之间的关系有几种:         一对多         多对一         一对一         多对多     举例:         用户和订单 ...

  9. Django学习手册 - ORM 数据创建/表操作 汇总

    ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...

随机推荐

  1. 想学Python?这里有一个最全面的职位分析

    Python从2015年开始,一直处于火爆的趋势,目前Python工程师超越Java.Web前端等岗位,起薪在15K左右,目前不管是小公司还是知名大公司都在热招中. 当然,每个城市对岗位的需求也不尽相 ...

  2. 在Python中利用CVXOPT求解二次规划问题

    工作中需要用到cvxopt,cvxopt安装有坑,大家注意下.1.首先一定要卸载numpy,无论是直接安装的,还是anaconda安装的,主要是必须用whl安装numpy才不会有包的冲突2.二次规划包 ...

  3. office 2016最新安装及激活教程(KMS)【亲测有效】!!

    前言 博主的一个朋友,咳咳--你们懂得,想装office,于是我就上网找了一下激活的方法,亲测有效,而且也没有什么广告病毒之类的,还比较方便,所以传上来方便大家.好了,进入正题: 安装office 首 ...

  4. idea热更新配置

    idea部署热启动如下,经过本人实验 在这里只能选择exploded因为它支持热部署 在这里选择如下 到这里已经完成热部署了,如果有问题欢迎反馈给我,我会及时回复

  5. 腾讯云,搭建nginx静态网站服务器

    搭建Http静态服务器环境 任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 安装 Nginx 在 ...

  6. BUAA_OO_博客作业一

    BUAA_OO_博客作业一 (一)程序结构分析 1.代码统计 第一次作业 第二次作业 第三次作业 代码复杂度展示第三次作业的 method ev(G) iv(G) v(G) Constant.Cons ...

  7. 【Codeforces 1114B】Yet Another Array Partitioning Task

    [链接] 我是链接,点我呀:) [题意] 让你把数组分成k个连续的部分 使得每个部分最大的m个数字的和最大 [题解] 把原数组降序排序 然后选取前m*k个数字打标记 然后对于原数组 一直贪心地取 直到 ...

  8. ansible special topics

    1.加速模式运行playbook accelerate 对于使用ansible 1.5 及之后版本的用户,加速模式只在以下情况下有用处: (A) 管理红帽企业版 Linux 6 或者更早的那些依然使用 ...

  9. FOJ2250 不可能弹幕结界

    Problem 2250 不可能弹幕结界 Time Limit: 1000 mSec    Memory Limit : 65536 KB Problem Description 咲夜需要穿过一片弹幕 ...

  10. 创建RpcEnv

    感觉这篇文章不错 2.1.2.创建RpcEnv -  RpcEndpoint -  RpcEndpointRef val systemName = if (isDriver) driverSystem ...