详解Django多对多表关系的三种创建方式
本文深入解析Django中实现多对多表关系的三种核心方式:自动创建、纯手动创建及半自动创建。详细对比了各方式在ORM跨表查询能力、扩展性及方法可用性上的差异,帮助开发者根据实际需求选择最优模型设计方案。
方式一:自动创建
# 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)
方式二:纯手动创建
# 这种方式无法通过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)
方式三:半自动创建
# 可扩展性高,并且能够符合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多对多表关系相关内容,建议查阅本站过往文章或继续浏览后续相关教程。感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









