目录

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创建多对多表关系内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!