gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:52:47 25 4
gpt4 key购买 nike

假设您有一个模型 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com