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日

相关文章

  • Django中的cookie与session操作

    添加cookie: def login(req): if req.method==”POST”: uf = UserInfoForm(req.POST) if uf.is_valid(): username = uf.cleaned_data[“username”] password = uf.cleaned_data[“password”] print u…

    Django 2023年4月10日
    00
  • python django 增删改查操作 数据库Mysql

    下面是详细讲解“python django 增删改查操作 数据库Mysql”的完整攻略。 简介 Python Django 是一种开源的 Web 框架,它利用了 Python 的强大功能和 MySQL 数据库的灵活性,在 Web 开发领域得到了广泛应用。本文将讲解如何使用 Django 进行 MySQL 数据库的增删改查操作,包括两个示例说明。 环境准备 在…

    Django 2023年5月16日
    00
  • django查询常用操作符及models和admin的写法

    以Publisher、Author、Book的model为例子 #coding=utf-8 from django.db import models # Create your models here. class Publisher(models.Model): name=models.CharField(verbose_name=”出版社”,max_le…

    Django 2023年4月10日
    00
  • Django如何将自己的网站让其他主机访问

    ##第一点: 需要在你的setting.py文件中将按照如下设置: ALLOWED_HOSTS = [‘127.0.0.1’, ‘192.168.1.102’] 192.168.1.102是Django所在机器的IP  (此段验证未成功:或者在中括号中加入你在局域网中的IP。如我在局域网中的IP为192.168.10.133 所以设置ALLOWED_HOST…

    Django 2023年4月11日
    00
  • 使用Pycharm创建一个Django项目的超详细图文教程

    下面就是关于如何使用Pycharm创建一个Django项目的超详细图文教程的完整攻略。 1. 准备工作 在开始创建Django项目之前,需要先确保已经安装了Python和Pycharm。 2. 创建项目 打开Pycharm,点击“Create New Project”按钮,进入“New Project”界面。在此界面中需要输入以下信息: 项目名称:自定义名称…

    Django 2023年5月16日
    00
  • python3–django for 循环中,获取序号

    功能需求:在前端页面中,for循环id会构不成连续的顺序号,所以要找到一种伪列的方式来根据数据量定义序号 因此就用到了在前端页面中的一个字段 forloop.counter,完美解决 1 <tbody> 2 {% for inrow in insocket_list %} 3 <tr> 4 <!– 这是序列号(相当于伪列)–…

    Django 2023年4月11日
    00
  • 搭建高性能的 Django 服务器栈

    http://logic0.blog.163.com/blog/static/18892814620136258532112/ 搭建高性能的 Django 服务器栈   2013-07-25 23:00:22|  分类:Django学习 网站  |举报|订阅 对不起各位,我有点稍微标题党了。 本文针对裸机 Linux 搭建 Django 的服务器栈,可直接应…

    Django 2023年4月12日
    00
  • Django中引入bootstrap的详细图文详解

    下面是Django中引入bootstrap的详细攻略和示例说明: 1. 安装Bootstrap 首先,我们需要安装Bootstrap。Bootstrap是一个开源的前端框架,提供了一系列易于使用的HTML、CSS和JavaScript库,可以快速构建美观的响应式网站和应用程序。 有很多种方法可以安装Bootstrap,例如从官方网站下载、使用CDN、使用NP…

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