详解解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项目
Jul 15 Python
python文件的md5加密方法
Apr 06 Python
Python实现GUI学生信息管理系统
Apr 05 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
Pycharm修改python路径过程图解
May 22 Python
Django中的模型类设计及展示示例详解
May 29 Python
python 基于卡方值分箱算法的实现示例
Jul 17 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
Django+Celery实现定时任务的示例
Jun 23 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
论坛头像随机变换代码
2006/10/09 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
在Python中使用模块的教程
2015/04/27 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
python实现解数独程序代码
2017/04/12 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
浅析python 字典嵌套
2020/09/29 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
经管应届生求职信
2013/11/17 职场文书
先进党支部申报材料
2014/12/24 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python