Django Admin:admin_list()

kd3sttzy  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(198)

假设你有一个模型Person,它可以有N个Book示例。
我想在django管理变更列表视图中显示一个人拥有的书籍数量。
很容易显示数字(在PersonAdmin上编写自定义方法)。
但我找不到一种方法,使它排序的书籍数量一个人。
我读了list_display的文档,但找不到答案。
根据文档,可以使用查询表达式。可以用这种方法解决吗?
在应用答案之后,它看起来是这样的。在这种情况下,每个示例都有N个日志条目:


的数据

zlwx9yxi

zlwx9yxi1#

借助**annoate()order_by()方法,对模型admin的get_queryset()**方法进行重新定义,然后定义一个可调用函数(book_count()),将值返回到更改列表页面

from django.db.models.aggregates import Count

class PersonAdmin(admin.ModelAdmin):
    list_display = ('book_count', 'other_field')

    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

    book_count.admin_order_field = 'book_count'

字符串

为什么不加**ordering**?

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

相关问题