详解解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的pycurl包用法简介
Nov 13 Python
Python中random模块生成随机数详解
Mar 10 Python
Python分析学校四六级过关情况
Nov 22 Python
django admin后台添加导出excel功能示例代码
May 15 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python中join()函数多种操作代码实例
Jan 13 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
Python用requests库爬取返回为空的解决办法
Feb 21 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 将excel导入mysql
2009/11/09 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
php类自动加载器实现方法
2015/07/28 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python文件和流(实例讲解)
2017/09/12 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
协议书怎么写
2014/04/21 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
民事起诉状范文
2015/05/19 职场文书
MySQL基础(一)
2021/04/05 MySQL
Promise面试题详解之控制并发
2021/05/14 面试题