小网站要备案吗,外贸推广信邮件,网站建设怎么,中国住房和城乡建设厅网站首页django orm中如何创建表关系 1. 表关系分析
表与表之间的关系: 一对多 多对多 一对一 没有关系
判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…django orm中如何创建表关系 1. 表关系分析
表与表之间的关系: 一对多 多对多 一对一 没有关系
判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来专门存储作者与作者详情表是一对一 提示: 创建表关系 先将基表创建出来 然后再添加外键字段. 这里建表可以没有先后顺序, 不同于mysql中建立外键的创建表以及插入记录的先后顺序. 2. 建立表
bookidtitlepricepublish_id1python从入门到入土123.1212生蚝的吃法大全666.6613说不是渣男本质其实就是444.442
authoridnameage1jason842egon73
book2authoridbook_idauthor_id111212322433
publishidnameadd1北方出版社北京2南方出版社南京
author2detailidphoneinfo180080088我喜欢跑步, 所以我是跑王288888888我喜欢吃生蚝和装逼 3. 建立外键表关系基本语法
# django orm中建立表关系一对一:author_detail models.OneToOneField(toAuthorDetail)一对多:publish models.ForeignKey(toPublish)多对多:authors models.ManyToManyField(toBook)拓展: 还可以有另一种书写方式, 不过这种方式必须放在被关联的类后. 这里必须放在Publish定义之后publish models.ForeignKey(toPublish)# 特点和注意事项:1. 先建立基表最后再建立外键关系, 没有sql中建立外键必须先建立被关联表, 加入记录先插入被关联表这么一说, 直接建立就行.2. django 1.x版本无序指定级联更新级联删除, 默认会帮你指定.3. 一对多, 一对一无需在需要关联的字段后面加_id, 默认会帮你加. 例如: publish - publish_id4. 一对多的表关系外键字段建立在多的一方5. 多对多的表关系无需类似于sql语句需要建立中间表, 会默认帮你创建虚拟的中间表6. 一对一, 多对多的表关系外键字段建立在查询频率较高的地方. 4. 在models.py中创建以上模型类
from django.db import modelsclass Book(models.Model):title models.CharField(max_length255, verbose_name书名)price models.DecimalField(max_digits8, decimal_places2, verbose_name价格) # 总共八位 小数点后面占两位# 一. 建立一对多关系: 图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id如果你自作聪明的加了_id那么orm还是会在后面继续加_id后面在定义ForeignKey的时候就不要自己加_idpublish models.ForeignKey(toPublish) # 默认就是与出版社表的主键字段做外键关联# 二. 建立多对多关系: 图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系让orm自动帮你创建第三张关系表authors models.ManyToManyField(toAuthor)class Publish(models.Model):name models.CharField(max_length255, verbose_name出版社名称)addr models.CharField(max_length255, verbose_name出版社地址)class Author(models.Model):name models.CharField(max_length255, verbose_name作者姓名)age models.IntegerField(verbose_name作者年龄)# 三. 建立一对一关系: 作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中OneToOneField也会自动给字段加_id后缀所以你也不要自作聪明的自己加_idauthor_detail models.OneToOneField(toAuthorDetail)class AuthorDetail(models.Model):phone models.BigIntegerField(verbose_name作者电话号码)addr models.CharField(max_length255, verbose_name作者家庭住址) django请求生命周期流程图