详解解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用threading实现多线程详解
Feb 03 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
python如何安装下载后的模块
Jul 03 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 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/11/25 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
JavaScript类的写法
2016/09/17 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
2014政务公开实施方案
2014/02/19 职场文书
同志主要表现材料
2014/08/21 职场文书
人事局接收函
2015/01/30 职场文书
教师求职自荐信范文
2015/03/04 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
教师素质教育心得体会
2016/01/19 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android