简单了解django orm中介模型


Posted in Python onJuly 30, 2019

什么是中介模型

中介模型针对的是ManyToMany(多对多)的时候第三张表的问题,

中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在中介模型

中介模型示例

普通的ManyToMany示例

class Book(models.Model):
  title = models.CharField(max_length=32)
  authors = models.ManyToManyField(to='Author') 
class Author(models.Model):
  name = models.CharField(max_length=32)

这时候Django会自动帮我们创建地上那张表,如下:

简单了解django orm中介模型

中介模型小示例

class Book(models.Model):
  ''''''
  title = models.CharField(max_length=32)
  authors = models.ManyToManyField(to='Author',through='Book2Author')
 
class Author(models.Model):
  name = models.CharField(max_length=32)
 
class Book2Author(models.Model):
  book_id = models.ForeignKey(to='Book')
  author_id = models.ForeignKey(to='Author')

这时候运行manage命令后就会生成一张第三张表,如下:

简单了解django orm中介模型

图中可以看出,Django创建ForeignKey的时候会在字段后自动添加'_id',所以,我们在写第三张表字段的时候就不用加_id了,如下:

class Book(models.Model):
  ''''''
  title = models.CharField(max_length=32)
  authors = models.ManyToManyField(to='Author',through='Book2Author')
 
class Author(models.Model):
  name = models.CharField(max_length=32)
 
class Book2Author(models.Model):
  book_id = models.ForeignKey(to='Book')
  author_id = models.ForeignKey(to='Author')

中介模型与Django自建表的区别

1、中介模型的第三张表是自己创建的,所以可以自己任意添加额外的字段,而Django自创建的第三张表的字段是固定的

2、中介模型没有add,set , remove,clear 方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python脚本操作MongoDB的教程
Apr 16 Python
python实现贪吃蛇小游戏
Mar 21 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python中itertools的用法详解
Feb 07 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
解决python3中os.popen()出错的问题
Nov 19 Python
用python批量下载apk
Dec 29 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
Python制作表白爱心合集
Jan 22 Python
Python爬虫学习之翻译小程序
Jul 30 #Python
安装docker-compose的两种最简方法
Jul 30 #Python
Django的性能优化实现解析
Jul 30 #Python
Python爬虫学习之获取指定网页源码
Jul 30 #Python
django-初始配置(纯手写)详解
Jul 30 #Python
django 单表操作实例详解
Jul 30 #Python
Apache部署Django项目图文详解
Jul 30 #Python
You might like
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
读jQuery之一(对象的组成)
2011/06/11 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
js图片无缝滚动插件使用详解
2020/05/26 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
python脚本后台执行方式
2019/12/21 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
详解Django中异步任务之django-celery
2020/11/05 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
上海方立数码笔试题
2013/10/18 面试题
再婚婚前财产协议书范本
2014/10/19 职场文书
买房协议书范本
2014/10/23 职场文书
职工年度考核评语
2014/12/31 职场文书
武夷山导游词
2015/02/03 职场文书