You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 如何为QuerySet添加关联数据 查询作者及名下全部书籍

解答

查询逻辑实现

Django 会为外键关联自动生成反向关系属性,默认命名规则为{小写关联模型名}_set,你无需额外使用annotate/aggregate就能直接获取关联书籍,仅需要调整查询语句优化性能即可:

  1. 直接使用默认反向关联的查询写法(可避免N+1查询问题):
from django.db.models import Count # 如果需要统计书籍总数才导入
# 基础查询,预加载所有关联书籍
authors = author.objects.prefetch_related('book_set').all()
# 如果需要额外追加每个作者的书籍总数统计,可以搭配annotate
authors = author.objects.prefetch_related('book_set').annotate(book_total=Count('book')).all()
  1. (可选优化)如果不想用默认的book_set命名,可以在定义Book模型的外键时添加related_name参数:
class book(models.Model):
     author = models.ForeignKey('author', on_delete=models.CASCADE, related_name='books')
     # 其他字段

后续就可以用author.books.all()访问关联书籍,语义更清晰。

注意:你当前的Author模型里CharField参数存在笔误,是max_length不是mac_length,否则运行会报错。

模板访问写法

直接在模板中循环反向关联的书籍集合即可,示例代码如下:

{% for author in authors %}
*{{ author.name }}*:
{% for book in author.book_set.all %}
- {{ book.你的书名字段 }}
{% endfor %}
{% endfor %}

如果设置了related_name='books',就把author.book_set.all替换成author.books.all即可。

内容的提问来源于stack exchange,提问作者MichaelKleine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 22:45:03