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

 更新时间:2021年08月22日 15:24:29   作者:秋刀鱼的滋味w  
本文主要介绍了详解解Django 多对多表关系的三种创建方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

相关文章

  • python Tkinter是什么

    python Tkinter是什么

    大家好,本篇文章主要讲的是 python Tkinter是什么,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python数据类型转换详解

    Python数据类型转换详解

    本篇文章里小编给大家整理的是关于Python中常用数据类型之间的转换相关知识点,有需要的朋友们可以学习下,希望能够给你带来帮助
    2021-10-10
  • 详解pyqt5 动画在QThread线程中无法运行问题

    详解pyqt5 动画在QThread线程中无法运行问题

    这篇文章主要介绍了详解pyqt5 动画在QThread线程中无法运行问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 如何用C代码给Python写扩展库(Cython)

    如何用C代码给Python写扩展库(Cython)

    这篇文章主要介绍了如何用C代码给Python写扩展库(Cython),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • python使用隐式循环快速求和的实现示例

    python使用隐式循环快速求和的实现示例

    这篇文章主要介绍了python使用隐式循环快速求和的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python mysql实现学生成绩管理系统

    python mysql实现学生成绩管理系统

    这篇文章主要为大家详细介绍了python mysql实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • python实现栅栏加解密 支持密钥加密

    python实现栅栏加解密 支持密钥加密

    这篇文章主要为大家详细介绍了python实现栅栏加解密,支持密钥加密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • python创建和删除目录的方法

    python创建和删除目录的方法

    这篇文章主要介绍了python创建和删除目录的方法,涉及Python操作目录的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • python运用pygame库实现双人弹球小游戏

    python运用pygame库实现双人弹球小游戏

    这篇文章主要为大家详细介绍了python运用pygame库实现双人弹球小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 浅谈关于Python3中venv虚拟环境

    浅谈关于Python3中venv虚拟环境

    这篇文章主要介绍了浅谈关于Python3中venv虚拟环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论