详解解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生成验证码实例
Aug 21 Python
跟老齐学Python之有容乃大的list(4)
Sep 28 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
python正则实现提取电话功能
Feb 24 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
python通过函数名调用函数的几种场景
Sep 23 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
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
详解使用Python处理文件目录的相关方法
2015/10/16 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python 自定义装饰器实例详解
2019/07/20 Python
python修改文件内容的3种方法详解
2019/11/15 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
灵泰克Java笔试题
2016/01/09 面试题
大二学生学习个人自我评价
2014/01/19 职场文书
村官工作鉴定评语
2014/01/27 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
教学督导岗位职责
2015/04/10 职场文书