【Django实战】创建多对多关系表的三种模式及优缺点分析

简介: 【Django实战】创建多对多关系表的三种模式及优缺点分析

第一种:通过ManyToManyField自动创建

class Book(models.Model):
    name = models.CharField(max_length=32)
    # 第一种自动创建
    authors = models.ManyToManyField(to='Author')


class Author(models.Model):
    name = models.CharField(max_length=32)
  • 优点:自动创建多对多关系表
  • 缺点:不能在多对多关系表上添加字段

第二种:手动创建

class Book(models.Model):
    name = models.CharField(max_length=32)


class Author(models.Model):
    name = models.CharField(max_length=32)


# 手动创建第三张表
class BookAuthor(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    state = models.CharField()
  • 优点:克服了第一种方法的缺点,可以自行添加字段
  • 缺点:不能使用ORM方式查询

第三种:使用through=…模型

最简单和最优雅的方法是使用through=…模型,这最终将需要最少的工作来保持数据同步。

class Book(models.Model):
    name = models.CharField(max_length=32)
    author = models.ManyToManyField(to='Author',through='BookAuthor',through_fields=('book','author'))


class Author(models.Model):
    name = models.CharField(max_length=32)


class BookAuthor(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    info = models.CharField(max_length=32)
相关文章
|
4月前
|
数据挖掘 数据库 Python
Django实战:基于Django和openpyxl实现Excel导入导出功能
`openpyxl` 是用于处理 Excel 文件的 Python 库。本文详解其在 Django 项目中的实战应用,涵盖 Excel 文件的生成、下载、上传与解析。
161 0
Django实战:基于Django和openpyxl实现Excel导入导出功能
|
5月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
229 1
|
4月前
|
监控 NoSQL 网络协议
Django 实时通信实战:WebSocket 与 ASGI 全解析(上)
WebSocket 是一种全双工通信协议,支持实时数据传输,适用于聊天、协作、监控等场景。ASGI 是异步 Web 标准,配合 Uvicorn 服务器和 Django Channels,可实现 Django 的 WebSocket 功能,提升实时应用性能。
256 0
|
4月前
|
自然语言处理 开发者 Python
Django 实战:I18N 国际化与本地化配置、翻译与切换一步到位
Django国际化与本地化指南,涵盖i18n和l10n的定义、配置、视图与模型中的翻译使用、消息文件生成与编译,以及多语言登录实战。助你打造多语言支持的Web应用。
235 0
|
4月前
|
Shell 数据库 网络架构
Django+DRF 实战:从异常捕获到自定义错误信息(下)
本文详解了 Django REST Framework 中 ValidationError 的验证流程与优先级,涵盖字段内置验证、自定义验证方法、对象级验证及数据库约束,并通过实战演示如何自定义异常提示信息。
135 1
Django+DRF 实战:从异常捕获到自定义错误信息(下)
|
4月前
|
人工智能 开发工具 数据库
Django实战:Python代码规范指南
PEP 8 是 Python 官方代码风格指南,提升代码可读性与团队协作效率。本文详解命名规范、注释写法、常用工具(如 Black、flake8)、编程实践与代码优化技巧,助力写出规范、易维护的 Python 代码。
283 7
|
3月前
|
缓存 监控 中间件
Django中间件自定义开发指南:从原理到实战的深度解析
Django中间件是Web应用的“交通警察”,在请求与响应过程中进行全局处理,适用于身份验证、日志记录、性能监控等功能。本文详解中间件的工作原理、开发步骤及实战案例,帮助开发者掌握自定义中间件的构建方法,提升Django应用的可维护性与扩展性。
255 0
|
4月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
259 1
|
4月前
|
消息中间件 存储 NoSQL
Django 实战:Celery 异步任务从环境搭建到调用全掌握
本文详解 Celery 核心概念、架构组成及工作流程,并实战演示如何在 Django 项目中集成 Celery,实现异步任务调用与事务提交控制,助你掌握从配置到部署的全流程开发技巧。
443 3
|
4月前
|
Python
Django+DRF 实战:自定义异常处理流程
本文详解DRF异常处理流程,包括默认处理机制与自定义异常处理器的实现方法。通过源码分析和实战示例,讲解如何全局捕获并统一返回错误信息,并结合日志记录与友好提示提升项目健壮性。适用于Django进阶开发。
193 4