详解解Django 多对多表关系的三种创建方式


Posted in Python onAugust 23, 2021

1、方式一:自动创建

# django orm 自动帮我们创建第三张表,我的app名字是app01, 表名为:app01_book_authors
# 这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。

# 书籍表
class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author')

# 作者表
class Author(models.Model):
    name = models.CharField(max_length=32)

2、方式二:纯手动创建

# 这种方式无法通过orm跨表查询(不建议使用)

# 表1
class Book(models.Model):
    name = models.CharField(max_length=32)

# 表2
class Author(models.Model):
    name = models.CharField(max_length=32)

# 表3
class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    info = models.CharField(max_length=32)

3、方式三:半自动创建

# 可扩展性高,并且能够符合orm查询

class Book(models.Model):
    name = models.CharField(max_length=32)
    # 第三种创建表的方式
    authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book', 'author'))
    # through 告诉 django orm 书籍表和作者表的多对多关系是通过 Book2Author 表来记录的
    # through fields 告诉 django orm 记录关系是用 Book2Author 表中的 book 字段 和 author字段 来记录的
    # 此关系在哪张表写的,through_fields中就优先写哪张表(那个字段)的小写
    # 但是,多对多字段的 add set remove clear 四个方法就用不了了


class Author(models.Model):
    name = models.CharField(max_length=32)


class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    info = models.CharField(max_length=32)

到此这篇关于详解解Django 多对多表关系的三种创建方式的文章就介绍到这了,更多相关Django创建多对多表关系内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详细讲解Python中的文件I/O操作
May 24 Python
详解Django通用视图中的函数包装
Jul 21 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
django 在原有表格添加或删除字段的实例
May 27 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
简单了解python高阶函数map/reduce
Jun 28 Python
python实现的Iou与Giou代码
Jan 18 Python
python selenium操作cookie的实现
Mar 18 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python 操作 MySQL数据库
Sep 18 Python
Python生成九宫格图片的示例代码
Apr 14 Python
一些让Python代码简洁的实用技巧总结
Aug 23 #Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 #Python
Python学习开发之图形用户界面详解
Aug 23 #Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 #Python
教你使用一行Python代码玩遍童年的小游戏
一文搞懂Python Sklearn库使用
python库sklearn常用操作
Aug 23 #Python
You might like
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
利用python画出折线图
2018/07/26 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
django的ORM操作 增加和查询
2019/07/26 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
职业生涯规划怎么写
2013/12/29 职场文书
幼儿园门卫制度
2014/01/29 职场文书
九年级数学教学反思
2014/02/02 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
大学生活动策划方案
2014/02/10 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
装修施工安全责任书
2014/07/24 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
律师催款函范文
2015/06/24 职场文书
公司保密管理制度
2015/08/04 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL