详解解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 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Python之多进程与多线程的使用
Feb 23 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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语句将数据库*.sql文件导入数据库
2014/05/05 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
繁简字转换功能
2006/07/19 Javascript
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
Python连接Impala实现步骤解析
2020/08/04 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
晚会邀请函范文
2014/01/24 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
公司员工检讨书
2014/02/08 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
个人股份合作协议书
2014/10/24 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis