详解解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查找相似单词的方法
Mar 05 Python
Python编程实现双击更新所有已安装python模块的方法
Jun 05 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
python调用c++传递数组的实例
Feb 13 Python
python实现趣味图片字符化
Apr 30 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
python tqdm库的使用
Nov 30 Python
python 批量将中文名转换为拼音
Feb 07 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 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
PHP的栏目导航程序
2006/10/09 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
php实现telnet功能示例
2014/04/08 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
PyCharm中代码字体大小调整方法
2019/07/29 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
python 写一个性能测试工具(一)
2020/10/24 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
入学申请自荐信范文
2014/02/26 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
支行行长竞聘报告
2014/11/06 职场文书
丧事主持词
2015/07/02 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
Python jiaba库的使用详解
2021/11/23 Python
java代码实现空间切割
2022/01/18 Java/Android
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript