详解解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脚本来控制Windows Azure的简单教程
Apr 16 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
python调用webservice接口的实现
Jul 12 Python
Python学习笔记之For循环用法详解
Aug 14 Python
python Shapely使用指南详解
Feb 18 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
python实现扫雷游戏的示例
Oct 20 Python
Python字符串查找基本操作代码案例
Oct 27 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
python利用while求100内的整数和方式
Nov 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 设置MySQL连接字符集的方法
2011/01/02 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
js tab效果的实现代码
2009/12/26 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python解释执行原理分析
2014/08/22 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python tkinter事件高级用法实例
2018/01/31 Python
把pandas转换int型为str型的方法
2019/01/29 Python
python实现简单图片物体标注工具
2019/03/18 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
python对文件的操作方法汇总
2020/02/28 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
《胡杨》教学反思
2014/02/16 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
户外拓展训练感想
2015/08/07 职场文书
导游词之日本富士山
2020/01/06 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python