详解解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的源码浅要剖析Python的内存管理
Apr 16 Python
Python实现的生成格雷码功能示例
Jan 24 Python
python 以16进制打印输出的方法
Jul 09 Python
python里dict变成list实例方法
Jun 26 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
python scrapy重复执行实现代码详解
Dec 28 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Python DES加密实现原理及实例解析
Jul 17 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
php图片裁剪函数
2018/10/31 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python 性能优化技巧总结
2016/11/01 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
经典c++面试题二
2015/08/14 面试题
建筑人员岗位职责
2013/12/25 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
教师师德反思材料
2014/02/15 职场文书
个人实习生的自我评价
2014/02/16 职场文书
母校寄语大全
2014/04/10 职场文书
工作保证书
2015/01/17 职场文书
学习十八大的感悟
2015/08/11 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Go归并排序算法的实现方法
2022/04/06 Golang