带有分页和分组的 Django ListView
Posted
技术标签:
【中文标题】带有分页和分组的 Django ListView【英文标题】:Django ListView with pagination and grouping 【发布时间】:2014-11-29 20:03:15 【问题描述】:假设我有 2 个模型:Artist 和 Album(专辑与 Artist 具有外键关系)...现在我想使用分页的ListView
显示所有专辑,但我想按艺术家分组显示它们。我知道 django 提供了一个强大的标签:regroup ...但是如果我对结果进行分页,我当然不能使用它,因为可能尚未从数据库中检索到一些艺术家专辑...所以我的问题是:我怎样才能使用 Django 的 ORM 完成这个?
目标是打印如下内容:
Artist 1 - album 1 - album 2 - album 3 Artist 2 - album 1 - album 2 ...
【问题讨论】:
所以您想显示专辑 - 按艺术家分组,但不显示艺术家姓名?您希望如何对结果进行排序?按艺术家姓名,按专辑名称?一张专辑只有一位艺术家吗? 我当然也想显示艺人姓名,一张专辑只有一个艺人 【参考方案1】:在您的模板中,您可以获取该艺术家的相关专辑:
<ul>
% for artist in object_list %
<li> artist
<ul>
% for album in artist.album_set.all %
<li> album </li>
% endfor %
</ul>
</li>
% endfor %
</ul>
【讨论】:
但这会触发对每个艺术家的查询...我想避免多次查询 您可以通过在 ListView 中执行select_related
来避免这种情况
不,我解决了...我必须使用prefetch_related
,因为我使用的是反比关系!查询是: Artist.objects.prefetch_related('albums') ...无论如何感谢您的帮助,我会将您的答案标记为已接受;)以上是关于带有分页和分组的 Django ListView的主要内容,如果未能解决你的问题,请参考以下文章