django之反向关系查询<related_model>_set/related_name

假设有两个模型:AuthorPost,其中Post模型通过ForeignKey字段与Author模型相关联。

模型定义
python 复制代码
from django.db import models

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

在这个例子中,Post模型有一个ForeignKey字段author,指向Author模型。这意味着每个Post对象都与一个Author对象相关联。

反向关系查询

通过反向关系查询,可以从Author对象获取所有与之相关联的Post对象。默认情况下,Django会为你创建一个名为post_set的反向关系管理器。

使用示例
python 复制代码
# 获取一个特定的作者对象
author = Author.objects.get(id=1)

# 使用反向关系查询获取该作者的所有文章
posts = author.post_set.all()

# 打印所有文章的标题
for post in posts:
    print(post.title)

在这个示例中,author.post_set.all()返回的是一个QuerySet,包含了所有与该Author对象相关联的Post对象。

自定义反向关系名称

如果不喜欢默认的<related_model>_set命名方式,可以在定义ForeignKey字段时使用related_name参数来指定一个自定义的反向关系名称。

示例
python 复制代码
class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='posts')
    created_at = models.DateTimeField(auto_now_add=True)

现在可以使用自定义的反向关系名称posts来获取与某个Author对象相关联的所有Post对象。

python 复制代码
# 获取一个特定的作者对象
author = Author.objects.get(id=1)

# 使用自定义的反向关系名称获取该作者的所有文章
posts = author.posts.all()

# 打印所有文章的标题
for post in posts:
    print(post.title)
相关推荐
B站_计算机毕业设计之家1 分钟前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
闲人编程34 分钟前
用Python分析你的Spotify/网易云音乐听歌数据
开发语言·python·ai·数据分析·spotify·网易云·codecapsule
“负拾捌”1 小时前
LangChain 中 ChatPromptTemplate 的几种使用方式
python·langchain·prompt
咋吃都不胖lyh1 小时前
小白零基础教程:安装 Conda + VSCode 配置 Python 开发环境
人工智能·python·conda
闲人编程2 小时前
构建一个短链接生成器服务(FastAPI + SQLite)
jvm·python·sqlite·fastapi·生成器·短链接·caodecapsule
杰瑞哥哥3 小时前
标准 Python 项目结构
开发语言·python
西部森林牧歌3 小时前
Arbess零基础学习 - 使用Arbess+GitLab实现Python项目构建/主机部署
python·ci/cd·gitlab·tiklab devops
Jay_Franklin3 小时前
Python中使用sqlite3模块和panel完成SQLite数据库中PDF的写入和读取
数据库·笔记·python·pycharm·sqlite·pdf·py
热爱编程的小白白3 小时前
【Playwright自动化】安装和使用
开发语言·python