当前位置: 首页 > 编程笔记 >

简单了解django orm中介模型

杭泉
2023-03-14
本文向大家介绍简单了解django orm中介模型,包括了简单了解django 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 方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍简单介绍一下CSS盒模型的理解?相关面试题,主要包含被问及简单介绍一下CSS盒模型的理解?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当对一个文档进行布局时候,浏览器渲染引擎会根据CSS-box模型,将所有元素表示为一个矩形盒子,CSS决定这些盒子的大小,位置,属性,如图: content包含元素真实内容的区域,由width,height,控制内容大小,内边距paddin

  • 本文向大家介绍简单介绍Python中的struct模块,包括了简单介绍Python中的struct模块的使用技巧和注意事项,需要的朋友参考一下 准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32

  • 本文向大家介绍简单明了带你了解CSS Modules,包括了简单明了带你了解CSS Modules的使用技巧和注意事项,需要的朋友参考一下 层叠样式表 我们知道,css的全名叫做层叠样式表,这个“层叠”到底是什么意思呢? 有一种解释是,如果你先写了一条样式规则(选手1): 然后又在后边写了一条类似的(选手2): 因为名字相同,选手2就会和选手1打起来(让你丫冒充我!)。结果是选手2获胜,class

  • 目录表 简介 使用sys模块 字节编译的.pyc文件 from..import语句 模块的__name__ 使用模块的__name__ 制造你自己的模块 创建你自己的模块 from..import dir()函数 使用dir函数 概括 简介 你已经学习了如何在你的程序中定义一次函数而重用代码。如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块。模块基本上就

  • 如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用web3j提供的API开发接口与以太坊进行交互,是java和android(安卓)工程师学习以太坊应用开发(DApp)的不二选择。 以太坊概述 以太坊是备受关注的区块链

  • 问题内容: JOIN和在FROM子句中声明多个表有什么区别? 如: 相比: 问题答案: 第二个版本具有显式和联接条件,是标准化的SQL。 带有子句的隐式连接语法是不赞成使用的语法(或者,被认为是不好的)-部分原因是很容易忘记该子句并导致笛卡尔积。