Django 管理员 : list_display() order by count of related object

标签 django django-admin

假设您有一个模型 Person,它可以有 N 个 Book 实例。

我想在 django 管理更改 ListView 中显示一个人拥有的书籍数量。

很容易显示数字(在 PersonAdmin 上写一个自定义方法)。

但我找不到一种方法可以根据一个人拥有的书籍数量对其进行排序。

我阅读了 list_display 的文档, 但找不到答案。

根据文档,可以使用查询表达式。是否可以这样解决?

应用答案后,这就是它的样子。在这种情况下,每个实例都有 N 个日志条目:

order-by-log-count

最佳答案

annoate() 的帮助下覆盖模型管理的 get_queryset() 方法>order_by() 方法。然后,定义一个可调用函数(book_count()) 将值返回到更改列表页面

<b>from django.db.models.aggregates import Count</b>

class PersonAdmin(admin.ModelAdmin):
    list_display = (<b>'book_count',</b> 'other_field')

    <b>def get_queryset(self, request):
        qs = super().get_queryset(request)
        qs = qs.annotate(book_count=Count('book')).order_by('-book_count')
        return qs

    def book_count(self, person_instance):
        return person_instance.book_count</b>

为什么我没有添加ordering

当我们调用 super() 时,Django 会抛出异常

关于Django 管理员 : list_display() order by count of related object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916454/

相关文章:

python - 如何在 django 中加载自定义字段

python - 如何检查密码是否重合?

python - Ipython常见问题

python - 从 AWS EB Linux 实例运行 manage.py

python - 在 Django 管理中显示用户外键的字段

python - 获取应用程序的 Django 版本

django - 如何在 Django 管理 UI 的文本区域中保留空行?

python - Django : Parsing Json data to template

Python Django REST API 测试

.net - 有没有类似于 django admin 的开源项目,但是是.NET 的?