详解解Django 多对多表关系的三种创建方式
作者:秋刀鱼的滋味w 发布时间:2021-03-13 04:59:16
标签:Django,多对多,表关系
目录
1、方式一:自动创建
2、方式二:纯手动创建
3、方式三:半自动创建
1、方式一:自动创建
# django orm 自动帮我们创建第三张表,我的app名字是app01, 表名为:app01_book_authors
# 这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。
# 书籍表
class Book(models.Model):
name = models.CharField(max_length=32)
authors = models.ManyToManyField(to='Author')
# 作者表
class Author(models.Model):
name = models.CharField(max_length=32)
2、方式二:纯手动创建
# 这种方式无法通过orm跨表查询(不建议使用)
# 表1
class Book(models.Model):
name = models.CharField(max_length=32)
# 表2
class Author(models.Model):
name = models.CharField(max_length=32)
# 表3
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
info = models.CharField(max_length=32)
3、方式三:半自动创建
# 可扩展性高,并且能够符合orm查询
class Book(models.Model):
name = models.CharField(max_length=32)
# 第三种创建表的方式
authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book', 'author'))
# through 告诉 django orm 书籍表和作者表的多对多关系是通过 Book2Author 表来记录的
# through fields 告诉 django orm 记录关系是用 Book2Author 表中的 book 字段 和 author字段 来记录的
# 此关系在哪张表写的,through_fields中就优先写哪张表(那个字段)的小写
# 但是,多对多字段的 add set remove clear 四个方法就用不了了
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
info = models.CharField(max_length=32)
来源:https://www.cnblogs.com/weiyiming007/p/12376062.html


猜你喜欢
- 本文为大家分享了linux yum安装mysql5.6简单过程,供大家参考,具体内容如下1.新开的云服务器,需要检测系统是否自带安装mysq
- 虽然每天发送高(hao)精(nan)专(dong)的资讯文章给大家,大家还是很给面子的都来阅读了,所以能看的出大家都是很爱学习的人喔,所以小
- 推荐的国内镜像站[ 个人推荐清华大学pypi镜像站(https://mirrors.tuna.tsinghua.edu.cn/help/py
- 1、冒泡排序它反复访问要排序的元素列,并依次比较两个相邻的元素。如果顺序(如从大到小)错了,就交换它们。访问元素的工作是反复进行,直到没有相
- 内联优化是一种常见的编译器优化策略,通俗来讲,就是把函数在它被调用的地方展开,这样可以减少函数调用所带来的开销(栈的创建、参数的拷贝等)。当
- 随着传统的数据库、计算机网络和数字通信技术的飞速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注。
- 这里所说的“小偷”指的是在ASP中运用XML中的xmlhttp组件提供的强大功能,把远程网站上的数据(图片,网页及其他文件)抓取采集到本地,
- 本文实例讲述了php函数serialize()与unserialize()用法。分享给大家供大家参考。具体方法如下:该实例主要讲述了php函
- 变量不需要声明Python的变量不需要声明,你可以直接输入:>>>a = 10那么你的内存里就有了一个变量a, 它的值是1
- 最近在学习Python,看到网上用Python将图片转换成字符画便来学习一下题目意思是,程序读入一个图片,以txt格式输出图片对应的字符画,
- 一、 Axios 的封装在 Vue 项目中,和后台进行数据交互是频繁且不可或缺的,刚开始没进行 Axios 封装的时候,每次请求后台数据都是
- 1、快捷键win+r输入cmd回车调出cmd界面,在命令行输入python回车,显示python命令无法识别2、登陆python官网http
- Oracle RAC提供两种方式实现负载均衡,第一种是纯技术手段,即在用户连接时,根据系统当前的负载情况决定由哪个节点处理用户请求;第二种是
- 一、Eclipse 的安装Eclipse的安装是很容易的。Eclipse是基于java的一个应用程序,因此需要一个java的运行环境(JRE
- #python中的函数定义,使用和传参###------------------- 必要参数 -----------------------
- 在access中进行时间的比较sql语句很简单,如select * from table where thetime>#\"
- 1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name2.获取所有表
- asp如何将RGB颜色转化成到16进制的?在R G B中输入小于255的数字点击观看即可转换成#开通的16进制。代码如下:<%R_RG
- 本节内容:1.前言2.相关概念3.Python中的默认编码4.Python2与Python3中对字符串的支持5.字符编码转换一、前言Pyth
- goroutine 是 Go语言中的轻量级线程实现,由 Go 运行时(runtime)管理。Go 程序会智能地将 goroutine 中的任