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)
相关推荐
mortimer1 分钟前
【实战复盘】 PySide6 + PyTorch 偶发性“假死”?由多线程转多进程
pytorch·python·pyqt
清静诗意2 分钟前
Django REST Framework(DRF)RESTful 最完整版实战教程
python·django·restful·drf
studytosky28 分钟前
深度学习理论与实战:Pytorch基础入门
人工智能·pytorch·python·深度学习·机器学习
长不大的蜡笔小新1 小时前
手写数字识别:从零搭建神经网络
人工智能·python·tensorflow
前进的李工1 小时前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
ins_lizhiming2 小时前
在华为910B GPU服务器上运行DeepSeek-R1-0528模型
人工智能·pytorch·python·华为
bwz999@88.com2 小时前
win10安装miniforge+mamba替代miniconda
python
std78793 小时前
用PYTHON实现俄罗斯方块游戏案例
python·游戏·pygame
许泽宇的技术分享4 小时前
当AI学会“说人话“:Azure语音合成技术的魔法世界
后端·python·flask