详解解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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
详解Python中dict与set的使用
Aug 10 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
python实现两张图片的像素融合
Feb 23 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 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
PHP4中实现动态代理
2006/10/09 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
小程序自定义日历效果
2018/12/29 Javascript
js实现简单扫雷
2020/11/27 Javascript
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python中open函数的基本用法示例
2019/09/07 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
学生档案自我鉴定
2013/10/07 职场文书
建筑工程自我鉴定
2013/10/18 职场文书
会计学自我鉴定
2014/02/06 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
项目采购员岗位职责
2014/04/15 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis