详解解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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
Python贪心算法实例小结
Apr 22 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
什么是python的函数体
Jun 19 Python
Python turtle库的画笔控制说明
Jun 28 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
python中os.remove()用法及注意事项
Jan 31 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
PHP MSSQL 存储过程的方法
2008/12/24 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
js中split函数的使用方法说明
2013/12/26 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
python实现中文分词FMM算法实例
2015/07/10 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
Python实现Restful API的例子
2019/08/31 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
党员组织生活会发言材料
2014/10/17 职场文书
提档介绍信范文
2015/10/22 职场文书
初一数学教学反思
2016/02/17 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python