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日

相关文章

  • Windows编译安装mod_wsgi,配合使用Django+Apahce

    编译环境: 均是32位版本 Microsoft Visual Studio 10.0 Microsoft SDKs v7.1 Apache2.4 Python3.4 mod_wsgi-4.5.0   要求:   1 Apache和Python都是32位或者都是64位, 2 Apache和Python是相同版本的C++编译器编译的 3 使用和上述相同版本的C+…

    Django 2023年4月11日
    00
  • Django初识

    web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。简单地说,就是你用别人搭建好的舞台来做表演,用别人做好的模板进行功能扩展。python的web应用框架主要有django,Tornado。 MVC模式和MTV模式 MVC全名是Model View Controll…

    Django 2023年4月11日
    00
  • Python – Django – ORM 自定义 char 类型字段

    用 CharField 定义的字段在数据库中存放为 verchar 类型 自定义 char 类型字段需要下面的代码: class FixedCharField(models.Field): “”” 自定义的 char 类型的字段类 “”” def __init__(self, max_length, *args, **kwargs): self.max_le…

    Django 2023年4月10日
    00
  • Django+Vue打造购物网站(三)

    商品列表页 通过商品列表页面来学习drf django的view实现商品列表页 在goods目录下新建一个views_base.py文件,用来区分drf的view和Dajngo自带的view的区别利用Django的view实现返回json数据 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 20…

    2023年4月9日
    00
  • django 在保存数据前进行数据校验

    我们想在保存用户进入数据库之前做一些字段的校验,先贴出代码; import re from django.db import models from django.db.models.signals import pre_save from django.dispatch import receiver UNAME_REG = re.compile(r”^\…

    Django 2023年4月13日
    00
  • Django:runserver实现远程访问

    Django自带的runserver实现远程访问 最近在Ubuntu服务器上创建了一个Django项目,想实现远程访问:新创建一个名为my_site的Django项目,目录结构如下: 项目结构 ../my_site/ ├── db.sqlite3 ├── manage.py └── my_site ├── __init__.py ├── __pycache_…

    Django 2023年4月13日
    00
  • [13]Docekr09-实战 Docker版Django项目发布

    目录 Docker第三章:Docker版Django项目发布 docker版django项目发布过程 推送镜像到阿里云 腾讯云镜像加速 阿里云镜像加速 问题 思考? Django的运行是基于python的环境,加上django包。在docker中运行django,实现方式是从docker下载python镜像,然后安装django运行所依赖的包。在docker…

    Django 2023年4月11日
    00
  • python 配置uwsgi 启动Django框架的详细教程

    下面给您详细讲解如何通过配置uwsgi来启动Django框架。 一、安装uwsgi 首先需要安装uwsgi,可以通过以下命令进行安装: sudo pip install uwsgi 二、Django项目配置 接下来,需要对Django项目进行配置。假设我们的Django项目目录为/path/to/project,对应的Django应用为myapp。 首先,在…

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