django 多对多关系建立 三种方式

Django - ORM 多对多关系 - 中间关系表的创建方式探讨 目录 多对多关系 - 三种中间表的创建方式 - 优劣总结 方式一、手动创建第三张表 方式二、自动创建第三张表 - MandyToManyField 方式三、半自动创建第三张表 -- 手动创建第三张表+ManyToMany建立关系(推荐使用) 多对多关系 - 三种中间表的创建方式 - 优劣总结 手动创建第三张表(A表,B表,A2B表),A、B内不建立与A2B的关联关系 -- 增删改... 阅读详情

#### django多对多关系建立的三种方法

* 方式一:全自动(不推荐)#

    - 优点:django orm会自动创建第三张表

    - 缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差

        ```

        class Book(models.Model):

            # ...

            authors = models.ManyToManyField(to='Author')

            

        class Author(models.Model):

            # ...

            pass

        ```

* 方式二:纯手动(不推荐)#

    - 优点:第三张表可以根据自己的要求随意添加额外的字段  

 

    - 缺点:orm在查询的时候,很多方法不支持,查询非常麻烦  

 

        ```

        class Book(models.Model):

            # ...

            pass

            

        class Author(models.Model):

            # ...

            pass

            

        class Book_Author(models.Model):

            book = models.ForeignKey(to='Book')

            author = models.ForeignKey(to='Author')

            # ...

            pass

        ```

* 方式三:半自动#

    - 优点:手动建表,但要告诉orm第三张表是自己建的,orm只需要提供查询方法

    - 缺点:虽然可以使用orm的查询方法,但不支持使用add(), set(), remove(), clear()

        ```

        class Book(models.Model):

            # ...

            authors = models.ManyToManyField(to='Author', through='Book_Author', through_fields=('book', 'author'))

 

        class Author(models.Model):

            # ...

            books = models.ManyToManyField(to='Book', through='Book_Author', through_fields=('author', 'book'))

            

        class Book_Author(models.Model):

            book = models.ForeignKey(to='Book')

            author = models.ForeignKey(to='Author')

            # ....

        ```

    - 说明:  

 

        半自动在创建外键的时候,要添加两个参数,through='关系表名‘和through_fiedls=('此表在关系表中字段名‘, '关联表在关系表中的字段名')  

 

        through_fiedls中的字段顺序:第三张表通过哪个字段查询单表,就把哪个字段放在前面

        方法三的好处:在项目后续迭代更新中,如果有需求,可向关系表中增加字段,给自己留条后路  

 

作者: 油饼er

 

出处:https://www.cnblogs.com/zj420255586/p/11761007.html



 

原文链接:Django创建多对多表关系的三种方式

Django 多对多关系 Django 中,多对多关系模型的作用主要是为了表示两个模型之间的多对多关系。具体来说,多对多关系允许一个模型的实例与另一个模型的多个实例相关联,反之亦然。以下实现简易博客和标签的示例。 阅读详情

相关推荐

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

Django的多对多实现添加

Django的多对多实现添加

zhaojiaxing123的博客 1711

(头歌作业)—6.1 葡萄酒评论分析报告(project)

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

2301_80677920的博客 1245

Django 模型操作 - 多对多(九)

Django 模型操作 - 多对多

分享我的点点滴滴,在成长路上与你同行! 1516

每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程)

混剪视频是指将多个视频片段、图片或音频素材进行剪辑组合,创造出新的视频内容。随着Coze上线联动剪映功能,混剪视频制作正在进入自动化时代,为创作者带来巨大便利。高效自动化处理:AI可以自动完成琐碎的剪辑工作,让创作者省下大量时间专注于项目策划和创意。批量素材产出:特别适用于抖音、小红书和视频号等平台上的养生、科普、心理、疗愈等垂直领域,可以自动化批量生产图片和视频素材。引流获客:通过优质内容吸引目标受众知识变现:通过教学传授技术工具变现:将搭建好的工作流作为产品销售。

汤师爷的博客 864

Uniapp微信小程序:详解根据角色权限动态展示底部tabbar,支持不同身份显示不同底部导航+灵活权限组合完整源码,菜单切换不闪烁、秒加载不卡(提供动态原生Tabbar配置+自定义组件形式2种方案)

uni-app微信小程序实现根据用户不同角色显示不同的tabBar,uniapp微信小程序原生tabbar实现动态菜单导航,微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色,动态pages,uni-app微信小程序动态tabBar,根据不同用户展示不同的tabBar,uni-app微信小程序动态切换tabBar,根据不同用户角色展示不同的tabBar,微信小程序自定义底部tabbar动态修改,Uniapp小程序根据权限(角色)不同动态展示底部tabbar,解决tabbar闪烁卡顿问题,小

✅ 精选推荐文章 4284

Django设置多对多关系的3种方法

1. Django帮我们生成第三张表 class Author(models.Model): name = models.CharField(max_length=32) book = models.ManyToManyField('Book') #不在author表中生成字段,而是自动产生第3张表author_book,只会产生author_id和book_id的字段 2. 自己创建第三张表 class AuthorBook(models, models): author = m

weixin_42612178的博客 893

Pixhawk2.4.8接口及引脚定义

pixhawk2.4.8接口定义图解

加斯顿工程师的博客 8745

django多对多、多对一关系添加函数add(), create(), 或者 set()

https://docs.djangoproject.com/zh-hans/3.1/ref/models/relations/#django.db.models.fields.related.RelatedManager.set https://docs.djangoproject.com/zh-hans/3.1/topics/db/models/#extra-fields-on-many-to-many-relationships 你也可以使用add(),create(), 或者set()创...

qq_27361945的博客 3991

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4192

手把手教你学Simulink--基于微电网的建模与仿真场景实例:独立运行模式下微电网的能量管理系统设计

本文详细介绍了使用Simulink对独立运行微电网能量管理系统进行建模与仿真的完整流程。主要包括:系统结构设计(分布式能源、储能系统、负荷等模块)、建模步骤(从创建项目到实现能量管理策略)、仿真设置与结果分析。通过建立基于规则的控制逻辑和优化调度算法,实现微电网的自主运行和能量优化管理。文章还提供了参数优化和多目标改进建议,为新能源和智能电网领域的研究与应用提供了实用指导。

MHD0815的博客 8582

Django框架(十三):Models之ORM对多表【多对多】的操作(增、删、改、查)

注意:表与表之间的外键关系的建立,分为不同的情况: 1.【一对多】关系,在子表(数据多的那一个表),创建外键: publish=models.ForeignKey("Publish",on_delete=models.CASCADE) 2.【多对多】关系,则需要一个中间表,创建方式:两种 第一种: authors=models.ManyToManyField("Author") ...

白骨梦儿 1702

全网最全-DA14531-全球最小-BLE从入门到精通开发教程

本教程主要适用于低功耗产品,DA14531它体积小,非常适用于对体积敏感的设备,如无线可穿戴、传感器、助听器等设备。本文经过作者发大量时间来记录开发项目的调试方法,里面有许多笔者开发心得体会,旨在让读者工程师快速上手,减少摸索时间,提高软件质量。读者对象本文档主要适用以下工程师:嵌入式系统工程师单片机软件工程师IOT固件工程师BLE固件工程师。

hejinwu1314的博客 5137

django之补充defer,only,事务(原子性操作),choice,反向解析,多对多的关系(三种写法)

一,defer,only -defer---->除了指定字段之外  -only---->只查询几个字段         -比如:ret=Book.object.all().only('name')         -id始终会查,结果是queryset对象,套book对象(里面只有id与name字段)         -问:如果取price,发生了什么?         -它会再次...

上善若水 1906

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python Django数据部分操作

Django 数据部分操作 一对多关系 表单数据 表单数据的三种获取方式 Ajax提交数据 多对多关系 一对多关系 使用外键进行一对多关系的创建 业务线 class Business(models.Model): #id caption = models.CharField(max_length=32) code = models.CharField(max_leng...

baobaohui 507

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

表关系分析与创建

blank=True 字段没被赋值不会报错。unique=True 索引-----唯一。以作者表和作者详情表为例 null=True 数据库是null。以图书表和出版社表为例 一本图书只有一个出版社;一个出版社可以有多本书。注意:将外键建在哪一方都可以,但是最好建在查询次数多的有一方。一对多关系,将字段建在多的一方。以图书表和作者表为例。

淘淘桃的博客 269

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ORM版,学生管理系统03

关于老师信息管理 建立多对多关系 第一种(通过外键建立) 自己写类,自己使其建立关系 缺点: 不能用Django ORM 多对多操作的语法 class Teacher(models.Model): tname = models.CharField(max_length=32) class TeacherToClass(models.Model): ...

weixin_34391854的博客 103

ORM版学员管理系统3

老师信息管理 思考 三种方式创建多对多外键方式及其优缺点。 通过外键创建 class Class(models.Model): id = models.AutoField(primary_key=True) # 主键 cname = models.CharField(max_length=32) # 班级名称 first_day = models....

weixin_30802273的博客 81

django 表关系之 多对多

应用场景: 比如一篇文章和标签的关系。一篇文章可以有多个标签,一个标签可以被多篇文章所引用。因此标签和文章的关系就是典型的多对多的关系。 下边只是一篇文章对应多个标签;一个标签对应多篇文章就不举例了,自己脑补下! 实现方式: django为实现多对多的关系,提供了专门的字段ManyToManyField。还是拿文章和标签举例: class Articles(models.Model): title = models.CharField(max_length=200, null=.

记录点滴 2968

Django 中的多对多关系(ManyToManyField)三种定义方式

中间模型可添加自定义字段(如创建时间、角色等)更灵活,但略复杂方式是否有中间模型是否能添加中间字段快捷方法(add/remove/set)推荐用途默认 ManyToManyField❌(Django 自动)❌✅ 可用简单多对多关系✅✅❌ 被禁用多对多且需附加字段场景完全手动中间模型✅✅❌ 全部禁用高度自定义业务、底层控制场景。

Azx的博客 660

Django ORM之多对多三种创建方式

阅读目录 Django ORM多对多的三种模式 使用默认的ManyToManyField创建第三张表、 自己创建第三张关系表 3.自己创建第三张表,在ManyToManyField中通过through和through_fields指定表名和字段 回到顶部 Django ORM多对多的三种模式 使用默认的ManyToManyField创建第三张表、 优势 可以使用ORM提供的快捷方法 add(...

lunco的博客 709

Django多对多关系建立及Form组件

目录Django多对多关系1.创建方式一全自动2.创建方式二纯手撸3.半自动(推荐使用)forms校验组件使用forms组件实现注册功能form常用字段和插件数据校验钩子函数 HOOK Django多对多关系 1.创建方式一全自动 class Book(models.Model): title = models.CharField(max_length=32) ...

fair_fair的博客 826

Django基础入门⑪:DjangoDjango数据表关联(一对一,一对多,多对多关系)

Django数据表关联Django数据表关联通过ORM(对象关系映射)技术实现不同模型(Model)之间的关联,建立表与表之间的关系。 在Django中,有以下三种常见的数据表关联方式: 一对一关联(One-to-One):关系中的每个对象都与另一个对象有且只有一个关联,例如一个人只有一个身份证号码。 一对多关联(One-to-Many):关系中的一个对象对应另一个对象的多个实例,例如一个班级有多个学生。多对多关联(Many-to-Many:关系中的每个对象都可以与多个其他对象相关联,例如一个学生可

weixin_50804299的博客 1万+

Django中多对多关系的orm表设计

作者的管理 1.设计表结构 出版社 书籍 作者 一个出版社出版多个书籍 1对多 书籍和作者的关系:一个作者写多本书,一本书可以是多个作者写。多对多 1)创建一张表,表中多对多的数据关系。使用 多对多字段的方法 2)创建的这个类,会创建两个表,app_加类名(开头变小写),app_这个类名_另一张表类名 3)这个类创建的表中没有多对多的字段,多对多的关系是以...

weixin_34378767的博客 1022

多对多表关系的三种创建方式

多对多关系表的三种创建方式 全自动 在我们之前创建多对多表的时候,一直用的都是全自动的方式来创建第三张关系表的 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8, decimal_places=2) # 创建多对多关系字段 authors = models.ManyToManyField(to='Author')

Cream_Bule的博客 1967
上一篇: 整理比较多的flask-web博客
下一篇: Django多对多数据增删改查
拓宽视野
博客等级 码龄9年 66粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值