django多对多表的创建,级联删除及手动创建第三张表

下面是关于 Django 多对多表的创建、级联删除以及手动创建第三张表的完整攻略:

多对多表的创建

在 Django 中创建多对多关系的表格非常简单。我们需要使用models.ManyToManyField()。下面是一个示例:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ManyToManyField(Author)

    def __str__(self):
        return self.title

在上面的模型中,我们创建了AuthorBook这两个类,它们之间存在多对多关系,因为一个作者可以写多本书,一本书也可以由多个作者合作完成。

我们可以看到,在Book类中,我们使用了models.ManyToManyField(Author)来创建多对多关系。

级联删除

在上面的示例中,我们定义了一个多对多关系。当我们删除一个Author对象时,相应的Book对象应该也会被删除。这就是级联删除。

在 Django 中实现级联删除也非常简单。我们需要在ForeignKeyManyToManyField中添加on_delete参数,将其设置为models.CASCADE,如下所示:

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ManyToManyField(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

在上面的示例中,我们向多对多关联的Author中添加了on_delete=models.CASCADE

手动创建第三张表

在上面的示例中,我们创建了BookAuthor两个类,并且它们之间有多对多的关系,因为一本书可以由多个作者合作完成,同样一个作者也可以写多本书。因此 Django 会自动创建一个名为myapp_book_authors的中间表,用于存储书籍以及对应的作者信息。

如果我们想要手动创建这个中间表,可以使用through参数。我们需要创建一个类来表示中间表,并将其传递给through参数,如下所示:

class Authorship(models.Model):
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author, through=Authorship)

    def __str__(self):
        return self.title

在上面的示例中,我们创建了一个名为Authorship的类,该类表示中间表。Book类使用了ManyToManyField,并传递了through=Authorship参数,以表示中间表。

经过上述攻略讲解,我们了解了 Django 中多对多关系表的创建、级联删除以及手动创建第三张表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django多对多表的创建,级联删除及手动创建第三张表 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 使用PyCharm创建Django项目及基本配置详解

    使用PyCharm创建Django项目及基本配置详解: 创建Django项目 打开PyCharm,点击菜单 File -> New Project,弹出新建项目窗口 在左侧选择 Python,在右侧选择 Django Server,并设置项目名称和路径,点击 Create 按钮创建新项目 配置Django项目 打开任意一个终端,输入以下命令,以安装常用…

    Django 2023年5月16日
    00
  • django模板的导入

    模板导入 前提:多个页面有一个相同的页面版块(多个有样式标签的集合体) 如何运用:可以将多个样式标签的集合进行封装对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include ‘版块页面的路径” ‘%} 四inclusion_tag自定义标签 — 模板导入 前提:多个页面有一个相似的页面版块 如何运用:1.先封装相似的页面标签结…

    Django 2023年4月13日
    00
  • django的ORM模型的实现原理

    Django的ORM(对象关系映射)模型是用于将数据库中的数据映射到Python对象上,从而使得我们能够通过Python代码来操作数据库。以下是ORM模型的实现原理的完整攻略: ORM模型的实现原理 配置数据库连接信息在Django中,我们需要在settings.py中配置数据库连接信息,包括数据库类型、数据库名称、用户名、密码等。这些配置信息会被用来连接数…

    Django 2023年5月16日
    00
  • Django3中的自定义用户模型实例详解

    下面我会详细讲解“Django3中的自定义用户模型实例详解”的完整攻略,过程中将会包含两条示例说明。 什么是Django3中的自定义用户模型? 在Django3中,用户模型是一个具有以下属性的模型: 用户名 电子邮件地址 密码 是否是超级用户 除此之外,还可以添加其他自定义字段。当创建一个新的Django3项目时,会自动创建一个名为User的用户模型。但是,…

    Django 2023年5月16日
    00
  • fastapi与django异步的并发对比分析

    下面我将详细讲解“FastAPI与Django异步的并发对比分析”的攻略。 简介 FastAPI和Django都是Python的Web框架,用于快速构建Web应用程序。FastAPI是一个新的框架,专注于高性能和强类型支持,具有异步能力。Django是一个成熟、完整的框架,具有广泛的社区支持和丰富的功能。本文将对比这两个框架在异步并发方面的性能表现。 环境准…

    Django 2023年5月15日
    00
  • Python之Django自动实现html代码(下拉框,数据选择)

      #模板   class IndexForm(forms.Form):   # 模板,用户提交的name和这里的变量名一定要是一致的.否则不能获取数据   user = forms.CharField(min_length=6, error_messages={‘required’: ‘用户名不能为空’, ‘min_length’: ‘用户名长度不能小于6…

    Django 2023年4月13日
    00
  • Django ModelForm用法详解

    Django ModelForm是一种自动生成表单的工具,它是以模型为基础,在模型类上定义的表单。在使用Django ModelForm时,我们只需要指定模型类作为表单数据的基础,就可以自动地生成表单。下面是Django ModelForm用法的完整攻略。 创建ModelForm 首先,我们需要定义一个ModelForm。在创建ModelForm时,需要通过…

    Django 2023年3月12日
    00
  • 【Python web 开发】django rest framwork 的token 登录和原理

      背景: 有些接口比如提交订单,获取用户列表是要用到用户信息的,是要用户登录后才能进行的 用户登录在前后端分离系统中与我们之前基于模板template进行开发是有区别的 思考一个问题:为什么我们的django  rest framwork 会有登录和退出功能呢? 因为,这里有配置哦 这里有 login 和loginout,里面的 login 调用了logi…

    Django 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部