首页 > 其他分享 >多对多的三种创建方式

多对多的三种创建方式

时间:2023-10-23 20:25:19浏览次数:26  
标签:name 方式 Author models 创建 三种 32 Model class

方法一:全自动

——利用orm自动帮无名创建第三张关系表

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)

 

优点:代码不需要自己编写,非常方便,还支持orm提供操作第三张关系表的方法...

不足之处:第三张关系表的扩展性极差(没有办法额外添加字段)...

 

 

方法二:纯手动

class Book(models.Model):
    name = models.CharField(max_length=32)


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')

 

优点:第三张表完全取决于自己进行额外的扩展
不足之处:需要写的代码较多,不能够使用orm提供的简单的方法


—— 不建议使用

 

 

方法三:半自动

class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author',
                                     through='Book2Author',
                                     through_fields=('book', 'author')
                                     )


"""
through_fields字段先后顺序:
    判断的本质:
        通过第三张表查询对应的表,需要用到哪个字段就把哪个字段放前面
    简化判断:
        当前表是谁,就把对应的关联字段放前面
"""


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')

 

不足之处:可以使用orm的正反向查询,但是没法使用add,set,remove,clear这四个方法

 

总结:需要掌握的是全自动和半自动,为了扩展性更高,一般我们都会使用半自动

标签:name,方式,Author,models,创建,三种,32,Model,class
From: https://www.cnblogs.com/wellplayed/p/17783362.html

相关文章

  • mac 以https的方式启动打包的静态资源
    1npxserve2 brewinstallmkcert 3新建目录,存放证书,在新目录执行,mkcert192.168.31.66 (本机ip)4pwd查看当前目录5在项目执行 npxserve--ssl-cert/Users/da/Desktop/dyl/doc/ssl/192.168.31.66.pem--ssl-key/Users/da/Desktop/dyl/doc/ssl/192.168.31.66-key.pem......
  • 软考上午05设计模式-创建型
    设计模式为了复用成功的设计和体系结构设计模式分为创建型结构型行为型模式 创建型设计模式:抽象工厂,生成器,原型,单例工厂模式的意图:使一个类的实例化延迟到其子类适用性:当一个类不知道它所创建的类的对象的类的时候当一个类希望由他的子类......
  • 上古时期的计算机网络连接方式 —— 互联网信号传输网络——电力网络下的计算机网络
       ==============================================  电力猫,使用电线进行计算机网络信号传递的一种组网方式,是计算机网络最早使用的一种组网方式,也是最早被淘汰的一种网络连接方式。 在几十年前的时候,那个时候我们国家的基础设施假设比较落后,很难完全通过电话线、......
  • MYSQL判断索引是否存在,不存在则创建索引(亲测可用)
    MYSQL判断索引是否存在,不存在则创建索引(亲测可用)springboot集成flyway管理数据库版本使用存储过程平滑更新系统数据库这是一个不存在就添加索引的例子,若需求是存在则删除微调下面的ifnotexists即可DROPPROCEDUREIFEXISTSadd_index;DELIMITER$CREATEPROCEDUREadd_......
  • RBAC的表结构创建
    简介:RBAC是指基于角色的访问控制(Role-BasedAccessControl),它是一种常见的访问控制模型,用于管理和控制用户对系统资源的访问权限。RBAC通过将用户和角色进行关联来管理权限,而不是直接将权限分配给个体用户。具体而言,RBAC模型包括以下几个核心概念:用户(User):系统中的实际用户。......
  • 设计模式(1) -- 创建模式
    创建模式一种封装创建对象的模式它包括:抽象工厂模式(AbstractFactory)构造者模式(Builder)工厂方法(FactoryMethod)原型对象(Prototype)单例模式(Singleton)AbstractFactory提供一个接口,用于创建一组相关或依赖的对象而无需指定它们的具体类型。从关键字"一组相关或依赖的对象"可知:......
  • 如何去掉桌面快捷方式左下角的小箭头(Win11)
    在对系统重命名之后,在快捷方式的左下角莫名的出现了小图标 如果想要去掉这个小图标(1)首先在桌面上创建一个txt文件(2)打开后输入指令regadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIcons"/v29/d"%systemroot%\system32\ima......
  • CentOS创建共享
    在VMware中设置CentOS7系统的共享文件夹,访问电脑共享的文件。在VMware的虚拟机设置选项里共享文件夹设置添加共享文件夹路径:在CentOS7里运行vmware-hgfsclient命令查看是否设置成功:在/mnt路径下创建hgfs文件夹,使用vmhgfs-fuse挂载共享目录:设置自动挂载共享文件编辑......
  • 使用 Data Assistant 快速创建测试数据集
    DataAssistant提供超过100种数据类型,为任何开发、测试或演示目的生成大量、异构、真实的数据。官网地址:http://www.redisant.cn/da主要功能Windows原生DataAssistant使用WindowsNative技术,这保证软件具有很小的安装体积和较高的响应速度。快速生成创建小型或大型数据集,......
  • 国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作
    要用人工智能技术来庆祝国庆中秋,我们可以使用生成对抗网络(GAN)生成具有节日氛围的画作。这里将使用深度学习框架TensorFlow和Keras来实现。一、生成对抗网络(GAN)生成对抗网络(GANs,GenerativeAdversarialNetworks)是一种深度学习模型,由蒙特利尔大学的IanGoodfellow等人在2014......