详解解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 28 Python
Python if语句知识点用法总结
Jun 10 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
python爬取酷狗音乐排行榜
Feb 20 Python
django模板结构优化的方法
Feb 28 Python
python安装pil库方法及代码
Jun 25 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
Python面向对象原理与基础语法详解
Jan 02 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Pycharm中如何关掉python console
Oct 27 Python
Python使用scapy模块发包收包
May 07 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 URL编码解码函数代码
2009/03/10 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
详解python中@的用法
2019/03/27 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python调用其他文件函数或类的示例
2019/07/16 Python
Django 外键的使用方法详解
2019/07/19 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python实发邮件实例详解
2019/11/11 Python
美国滑板店:Tactics
2020/11/08 全球购物
旅游文化节策划方案
2014/06/06 职场文书
销售队伍口号
2014/06/11 职场文书
青奥会口号
2014/06/12 职场文书
物流管理专业推荐信
2014/09/06 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
公司股份合作协议书
2014/12/07 职场文书
小学生思想品德评语
2014/12/31 职场文书