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

yizhihongxing

下面是关于 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日

相关文章

  • 使用Django框架创建项目

    使用Django框架创建项目的完整攻略如下: 1. 安装Python和Django 首先,需要安装Python和Django,其中Python的版本应该在3.6及以上。Django的安装可以使用以下命令: pip install Django 2. 创建Django项目 Django项目可以使用以下命令进行创建: django-admin startproj…

    Django 2023年5月16日
    00
  • Django 入门项目案例开发(中)

      关注微信公众号:FocusBI 查看更多文章;加QQ群:808774277 获取学习资料和一起探讨问题。   昨天已经描述了如何搭建Django的开发环境,今天描述业务流程,具体我们要实现一个什么样的业务;   以下的业务都是假设的(网上书店   页面做的low):   1.用户注册及登录业务:     这是一个网上书店阅读平台,用户注册后可以阅读书籍;…

    Django 2023年4月11日
    00
  • Django设置/获取/删除session

    # 设置sessiondef setSession(request): request.session[‘username’] = ‘ruan’ request.session[‘isLogin’] = True return HttpResponse(‘OK’)# 获取session def GetSession(request): isLogin = r…

    Django 2023年4月13日
    00
  • Django 项目配置拆分独立的实现

    下面是详细讲解“Django 项目配置拆分独立的实现”的完整攻略: 1. 配置文件拆分 Django 在项目内部自带了一个名为 settings.py 的配置文件,这个文件包含了 Django 项目的大部分配置信息。如果项目修改量较大,那么配置文件会变得非常冗长,难以维护。因此,将配置文件拆分成多个小文件,可以更好地管理和维护配置信息。 首先,我们需要创建一…

    Django 2023年5月16日
    00
  • Django2.2配置xadmin的实现

    下面是详细的“Django2.2配置xadmin的实现”的攻略,包含两个示例: 简介 XAdmin是一个基于Django的第三方管理后台框架,它提供了很多方便的功能,如内置了Bootstrap、jQuery、font-awesome等前端框架,同时支持主题定制和插件扩展等功能。下面让我们来详细讲解一下如何在Django2.2中配置XAdmin。 准备工作 在…

    Django 2023年5月16日
    00
  • [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ-LQJ/p/5604331.html 现在步入正题,这篇文章是关于自有权限管理系统设计的思路描述,自有权限管理系统是抛弃django自带的后台管理界面,基于自己…

    2023年4月10日
    00
  • Django实现翻页的示例代码

    下面我将为你详细讲解Django实现翻页的示例代码的完整攻略。 首先,在Django中,常用的翻页插件有三种:django-pure-pagination、django-pagination和django-endless-pagination。其中,django-pure-pagination是最基础的一种插件,用于简单的分页操作。django-pagina…

    Django 2023年5月16日
    00
  • CI/CD—-jenkins+gitlab+django(内网)

    1.py第三方包获取 ./pip3 install –target=/home/pyscript Django==1.8.11 ./pip3 install –target=/home/pyscript Django==1.8.11 -i “http://pypi.douban.com/simple/” –trusted-host pypi.douba…

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