Django多对多关系:模型定义与CRUD操作实战

一颗松果
一颗松果
发布时间:2026-10-13 | 5人浏览过
原创

本文详解Django中多对多关系的模型定义与数据操作方法。通过Publisher、Book和Author模型示例,演示如何使用ManyToManyField建立关联。重点解析create、add、remove及clear四种核心操作的具体代码实现,帮助开发者掌握Django ORM中复杂关系的增删改查技巧。

Django多对多关系概述

在Django框架中,处理实体间多对多(Many-to-Many)关系是数据库建模的常见需求。理解并正确配置关系表,是实现复杂数据交互的基础。

模型定义与结构配置

为了演示多对多关系的构建,我们需要定义三个核心模型:Publisher(出版社)、Book(书籍)和Author(作者)。其中,Publisher与Book是一对多关系,而Author与Book之间则通过ManyToManyField建立多对多关联。具体模型定义如下代码所示:


from django.db import models

# Create your models here.

class Publisher(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=64,null=False,unique=True)

  def __str__(self):
    return "publisher_name:{}".format(self.name)

class Book(models.Model):
  id = models.AutoField(primary_key=True)
  title = models.CharField(max_length=128,null=False)
  publisher = models.ForeignKey(to=Publisher,related_name="books")

  def __str__(self):
    return "book_title:{}".format(self.title)

class Author(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=16,null=False)
  book = models.ManyToManyField(to="Book")

  def __str__(self):
    return "author_name:{}".format(self.name)

关联数据的增删改查操作

在获取到Author对象后,可以通过其关联的book管理器执行多种操作。以下代码展示了如何查询作者关联的书籍,以及执行创建、添加、删除和清空关联记录的完整流程:


import os

if __name__ == '__main__':
  #加载Django项目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE","testinclude.settings")
  #导入Django,并启动Django项目
  import django
  django.setup()

  from ormtest import models

  #多对多查询
  #查询作者(小白),写过的所有书有那些
  author_obj = models.Author.objects.get(name="小白")
  print(author_obj)
  author_obj_books = author_obj.book.all()
  print(author_obj_books)

  #1.create(为小白作者对象创建一本书)
  #首先:在book表中创建一本书,并指定相应的出版社
  #然后:在作者和书的多联多系表中,自动添加一条关联记录
  author_obj.book.create(title="zabbix从入门到精通",publisher_id=3)

  #2.add(为小白作者,添加一本书(网络基础原理))
  book_obj = models.Book.objects.get(title="网络基础原理")
  author_obj.book.add(book_obj)

  #3.remove(为作者小白,删除一本书《网络基础原理》)
  #1、为作者小白,删除一本书<网络基础原理>
  book_obj = models.Book.objects.get(title="网络基础原理")
  author_obj.book.remove(book_obj)
  #为作者小白,删除一本书,书的id为4
  author_obj.book.remove(4)

  #4.clear(把作者为小白的关联的书,全部清空删除)
  author_obj.book.clear()

以上即为Django多对多关系模型定义及核心操作方法的全部内容。希望这些示例能帮助您更好地理解和应用Django ORM,如有任何疑问,欢迎继续交流探讨。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表