简单了解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装饰器使用示例及实际应用例子
Mar 06 Python
Python实现比较两个列表(list)范围
Jun 12 Python
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
python绘制圆柱体的方法
Jul 02 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
Python requests接口测试实现代码
Sep 08 Python
python编写实现抽奖器
Sep 10 Python
利用python绘制正态分布曲线
Jan 04 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
7个关于Python的经典基础案例
Nov 07 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
smarty section简介与用法分析
2008/10/03 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PHP调用其他文件中的类
2018/04/02 PHP
什么是JavaScript
2009/08/13 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
js简单时间比较的方法
2016/08/02 Javascript
js数组去重的hash方法
2016/12/22 Javascript
angular分页指令操作
2017/01/09 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python实现剪切功能
2019/01/23 Python
python读文件的步骤
2019/10/08 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python实现序列化及csv文件读取
2020/01/19 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
工商管理毕业生推荐信
2013/12/24 职场文书
一月红领巾广播稿
2014/02/11 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
法制宣传月活动总结
2014/04/29 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
AngularJS实现多级下拉框
2022/03/25 Javascript
KVM基础命令详解
2022/04/30 Servers
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL