如何在Django模板中显示过滤排序后带Author字段的Book列表?
Django显示符合条件书籍及对应作者姓名的实现方案
1. 优化视图查询(推荐,避免N+1查询问题)
在views.py中,给查询集添加select_related('author'),预加载关联的Author数据,减少数据库查询次数:
from django.shortcuts import render from .models import Book def book_list(request): books = Book.objects.filter(publication_date__gte='2022-01-01')\ .select_related('author')\ .order_by('-publication_date') return render(request, 'book_list.html', {'books': books})
2. 编写模板显示数据
在book_list.html模板中,直接通过外键关联访问作者姓名:
<!DOCTYPE html> <html> <head> <title>书籍列表</title> </head> <body> <h1>2022年及以后出版的书籍</h1> <ul> {% for book in books %} <li> <strong>{{ book.title }}</strong> - 作者:{{ book.author.name }} - 出版日期:{{ book.publication_date }} </li> {% empty %} <li>暂无符合条件的书籍</li> {% endfor %} </ul> </body> </html>
说明
- 由于
Book的author字段是指向Author的外键,模板中可以直接通过book.author.name获取对应作者的姓名。 select_related('author')是性能优化手段,会一次性查询出书籍及关联的作者数据,避免遍历书籍时反复查询作者表的问题;如果数据量较小,不添加该方法也能正常运行,但数据量大时建议加上。
内容的提问来源于stack exchange,提问作者Rahul Krishnan
相关产品推荐
相关产品推荐

