详解解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实现给数组按片赋值的方法
Jul 28 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Python reduce()函数的用法小结
Nov 15 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 Python
python产生模拟数据faker库的使用详解
Nov 04 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多个版本的分析解释
2011/07/21 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php文件上传类的分享
2017/07/06 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
python根据日期返回星期几的方法
2015/07/06 Python
Python正则简单实例分析
2017/03/21 Python
python之yield和Generator深入解析
2019/09/18 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
社区活动策划方案
2014/08/21 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
平面设计师岗位职责
2014/09/18 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
单位委托书格式范本
2014/09/29 职场文书
2014年统战工作总结
2014/12/09 职场文书
举起手来观后感
2015/06/09 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL