详解解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制作爬虫采集小说
Oct 25 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python安装twisted的问题解析
Aug 21 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python读出当前时间精度到秒的代码
Jul 05 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
Python3 Click模块的使用方法详解
Feb 12 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
python+requests接口自动化框架的实现
Aug 31 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中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python简单读取json文件功能示例
2017/11/30 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python实现顺时针打印矩阵
2019/03/02 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Puppeteer使用示例详解
2019/06/20 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Python执行时间的几种计算方法
2020/07/31 Python
Django多个app urls配置代码实例
2020/11/26 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
MyBatis 动态SQL全面详解
2021/10/05 MySQL