Orm之中介模型
什么是中介模型
中介模型针对的是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会自动帮我们创建地上那张表,如下:

中介模型小示例
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创建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 方法
Orm之中介模型的更多相关文章
- Django框架 之 ORM中介模型
Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据 ...
- Django QuerySet和中介模型
笔记如下 一.QuerySet QuerySet是什么? 类似列表里边存着对象 只和ORM有关系 from app01.models import Book def qDemo(request): b ...
- 中介模型以及优化查询以及CBV模式
一.中介模型:多对多添加的时候用到中介模型 自己创建的第三张表就属于是中介模型 class Article(models.Model): ''' 文章表 ''' title = models.Char ...
- Django进阶之QuerySet和中介模型
QuerySet QuerySet是查询集,就是传到服务器上的url里面的查询内容.其形态类似于Python的列表,列表中的元素是QuerySet对象.支持大部分列表的内置方法. 可切片 QueryS ...
- 中介模型,cbv视图,和查询优化
中介模型: 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据到两个模型之间的关系上. 例如,有这 ...
- ORM对象/关系模型
1 ORM 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据. 传达性:数据库结构被任何人都能理解的语言文档化. 精确性: ...
- Django-model进阶(中介模型,查询优化,extra,整体插入)
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. ? 1 >>> Entry.objects.al ...
- Django - 回顾(2)- 中介模型
一.中介模型 我们之前学习图书管理系统时,设计了Publish.Book.Author.AuthorDetail这样几张表,其中Book表和Author表是多对多关系,处理类似这样简单的多对多关系时, ...
- model进阶(queryset,中介模型,查询优化,extra)
queryset 方法 ############# 可切片 def queryTest(request): ret = models.Atricle.objects.all() 数据库查询 print ...
随机推荐
- modal verbs(一)
什么是modal verb?翻译成中文就是情态动词. modal的意思是模式的,情态的,形式的.Bootstrap中的模态框就是这个词modal. 情态动词翻译挺准确的,就是表达说话人的情绪,态度或语 ...
- 微信扫一扫JSSDK 扫一扫报错 invalid signature 问题
交代一下业务场景 在在四个页面都需要用到扫一扫去扫二维码.然而在图三-我的订单 下单中这个页面扫一扫不起效,当时就郁闷了为啥其他页面有用,这里却没用,开始调试吧. 报错信息是签名验证不成功. 自己去打 ...
- 走近webpack(0)--正文之前的故事
在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webpack的使用方法并不是十分了解,只是会用写好 ...
- Redis sentinel & cluster 原理分析
1. Redis集群实现分析 1.1 sentinel 1. 功能 Sentinel实现如下功能: (1)monitoring--redis实例是否正常运行. (2)notification-- ...
- Webpack结合ES6
一.概述ES6现在正是风华正茂的时候,各个公司都是 尝试去使用,并且作为前端工程师ES6也是体现技术的亮点.但是,现在的浏览器对es6支持不是 特别的兼容,最终还是需要把es6转换为es5,webpa ...
- C++引用指针 & 构造函数
近来回转 C++的学习,脑子又被搞得了一团迷(简直不要忘得太快..... ) 过后静下来想一想,还是因为有些东西没搞清楚导致,所以理了理两个容易搞迷糊的地方. 1. 引用与指针 C++进行传值更 ...
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- nginx日志切割配置
编辑虚拟主机文件 /etc/nginx/conf.d/default.conf 在server段添加如下配置 if ($time_iso8601 ~ "^(\d{4})-(\d{2})-( ...
- Oracle 琐表和查询谁在琐表并解决
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容. (1)锁表查询的代码有以下的形式: select coun ...
- Beta冲刺第二天
一.昨天的困难 没困难 二.今天进度 局部测试并修复出现的bug 1.林洋洋:修复登录页面显示问题,修复日程查询问题 2.黄腾达:修复创建协作开始时间和结束时间没做检验的问题 3.张合胜:修复页面内容 ...