多对多三种创建方式
1.全自动(用在表关系不复杂的一般情况)
class Book(models.Model):
title=models.CharField(max_length=32)
多对多关系字段
authors=models.ManyToManyField(to='Authors') class Authors(models.Model):
name=models.CharField(max_length=32) 全自动创建第三张关系表的好处:
至始至终都没有操作第三张表,全部都是由orm自动帮你创建的
还内置了四个操作第三张表的方法
add remove set clear 不足之处:
自动创建的第三张表无法扩展需要的字段,不支持修改,表的扩展性很差
(封装程度越高,可扩展性越低) 2.纯手撸三张表(了解)
class Book(models.Model):
title=models.CharField(max_length=32) class Authors(models.Model):
name=models.CharField(max_length=32) class Book2Authors(models.Model):
book=models.ForeignKey(to='Book')
author=models.ForeignKey(to='Authors')
create_time=models.DateField(auto_now_add=True) 好处:
第三张表中字段个数和字段名称全都可以自己来定义 不足之处:
不再支持orm跨表查询,没有正反向查询的概念
不支持add remove set clear 3.半自动(推荐使用) class Authors(models.Model):
name=models.CharField(max_length=32) class Book2Authors(models.Model):
book=models.ForeignKey(to='Book')
authors=models.ForeignKey(to='Authors') class Book(models.Model):
title=models.CharField(max_length=32)
#多对多关系字段
authors=models.ManyToManyField(to='Authors',through='Book2Authors',through_fields=("book","authors")) '''
1.当你的ManyToManyField只有一个参数的情况下,orm会自动帮你创建第三张关系表
2.如果你加了through='第三张关系表表名',
和through_fields=("关系表表字段1","关系表表字段2"),
,那么orm就不会自动帮你创建第三张表,但是它会在内部帮你维护表关系,让你能够继续使用orm的跨表查询 3.through_fields=("第三张关系表表字段1","第三张关系表表字段2")中字段放置上是有顺序的,
注意事项:
Book表中多对多关系字段,:
authors=models.ManyToManyField(to='Authors',through='Book2Authors',through_fields=("book","authors"))
through_fields【!!放在哪张表中,该表的表名就放在前面!!】 4.
through='第三张关系表表名',
through_fields=("第三张关系表表字段1","第三张关系表表字段2"), '''

django基础之day09,多对多创建数据表的三种方式的更多相关文章

  1. Mysql 删除数据表的三种方式详解

    用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, 用 delete. 删除强度:dro ...

  2. iReport+jasperreport创建子表的几种方式(1)

    在制作报表的过程中,子表是不可缺少的.今天就研究了一下制作子表的几种方式 一.连接数据库创建子表 以MySQL为例: 我的数据源数据库中的表 watermark/2/text/aHR0cDovL2Js ...

  3. java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  4. Java反射机制(创建Class对象的三种方式)

    1:了解什么是反射机制? 在通常情况下,如果有一个类,可以通过类创建对象:但是反射就是要求通过一个对象找到一个类的名称:   2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类 ...

  5. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  6. Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Fi ...

  7. java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  8. PHP中数据类型转换的三种方式

    PHP中数据类型转换的三种方式 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: 1.(int).(integer):转换成整形2.(float).(double).(real):转换成 ...

  9. spring中创建bean对象的三种方式以及作用范围

    时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

随机推荐

  1. bert+seq2seq 周公解梦,看AI如何解析你的梦境?【转】

    介绍 在参与的项目和产品中,涉及到模型和算法的需求,主要以自然语言处理(NLP)和知识图谱(KG)为主.NLP涉及面太广,而聚焦在具体场景下,想要生产落地的还需要花很多功夫. 作为NLP的主要方向,情 ...

  2. 彻底搞懂CSS伪类选择器:is、not

    本文介绍一下Css伪类:is和:not,并解释一下is.not.matches.any之前的关系 :not The :not() CSS pseudo-class represents element ...

  3. [Windows篇] 在windows 10上源码编译gtest 并编写CMakeLists.txt

    本文首发于个人博客https://kezunlin.me/post/aca50ff8/,欢迎阅读! compile gtest on windows 10 Guide compile gtest on ...

  4. 使用 Topshelf 组件一步一步创建 Windows 服务 (2) 使用Quartz.net 调度

    上一篇说了如何使用 Topshelf 组件快速创建Windows服务,接下来介绍如何使用 Quartz.net 关于Quartz.net的好处,网上搜索都是一大把一大把的,我就不再多介绍. 先介绍需要 ...

  5. webuploader 快速应用(C#)

    百度的WebUploader前端插件作为目前比较好用且免费的附件上传工具,利用了断点续传特点实现了大文件上传功能,其更好的兼容性与界面效果完全可以替换掉IE的activex 上传控件.许多人或许还不知 ...

  6. RPM命令执行失败:bash: rpm: 未找到命令...

    出现错误截图如下: 这是由于误操作导致rpm文件缺失导致 将另一台完好的服务器上RPM文件及缺失文件上传至异常服务器上即可修复 异常服务器A:192.168.1.230 完好服务器B: 任意 服务器B ...

  7. spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)

    这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...

  8. day20191010ClassNotes

    笔记: 1.DAO模式组成部分: 程序 ----> 数据库 实体类 数据库中的表 工具类:公共的数据库连接.关闭.公共的增删改.查询 接口 : 程序提倡的是面向接口编程,从而降低程序的耦合性 实 ...

  9. Hadoop streaming脚本中约束关系参数详解

    1 -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \ 2 -D ...

  10. P1046 陶陶摘苹果

    题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...