新闻动态

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

发布日期:2022-02-07 09:25 | 文章来源:CSDN

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)

到此这篇关于详解解Django 多对多表关系的三种创建方式的文章就介绍到这了,更多相关Django创建多对多表关系内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

国外服务器租用

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部