Django多对多关系:模型定义与CRUD操作实战
本文详解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,如有任何疑问,欢迎继续交流探讨。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













