Django
中间件:概述
中间件:自定义
Celery(一)
内置应用的作用
内置中间件的作用
Celery(二)
模型 class Meta
模型 管理器(Manager)
related_name 介绍
prefetch_related 介绍
本文档使用 MrDoc 发布
-
+
首页
related_name 介绍
### 背景 在 Django 中,定义模型之间的外键关系时,通常存在两个方向: - `正向关系`:在外键字段所在的模型中,可以直接通过该字段访问关联的对象。 - `反向关系`:通过被关联对象,可以访问指向它的多个对象(即,a 对象关联到多个 b 对象)。 `related_name` 参数的作用就是用来为这种反向关系指定名称。下面详细说明其作用及使用方式: ### `related_name`的作用 >s 作用1:自定义反向关系的访问名称 默认情况下,如果不指定 `related_name`,Django 会自动为外键关系生成一个名称,格式为 `模型名_set`。例如,有如下模型定义: ``` book = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 在这个例子中,Author实例反向访问book对象可以这样写: ``` author.book_set.all() ``` 如果你希望使用更符合业务语义的名称(例如 books),可以这样写: ``` book = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE) ``` >s 作用2:避免名称冲突 如果一个模型中有多个外键都指向同一个目标模型,则默认的反向关系名称会重复,此时必须使用 related_name 显式指定不同的名称,防止冲突。 >s 作用3:禁止反向关系 有时你不希望对方能够通过反向引用访问当前模型,这时可以将 related_name 设置为 "+",例如: ``` user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="+") ``` 表示不会为 User 创建任何反向关联属性。 ### 示例代码 假设有如下两个模型,我们希望通过作者来访问他的所有书籍,并且希望调用 `books` 而不是默认的 `book_set`: ``` from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) # 设置 related_name 后,一个 Author 实例可以通过 books 获取所有与之关联的 Book 实例 author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name="books") ``` 使用示例: ``` # 获取某个作者的所有书籍 author = Author.objects.get(pk=1) all_books = author.books.all() ``` 如果未设置 `related_name`,则需要使用默认名称: ``` all_books = author.book_set.all() ```
gaojian
2025年2月19日 14:28
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码