假设您有一个模型 Person
,它可以有 N 个 Book
实例。
我想在 django 管理更改 ListView 中显示一个人拥有的书籍数量。
很容易显示数字(在 PersonAdmin 上写一个自定义方法)。
但我找不到一种方法可以根据一个人拥有的书籍数量对其进行排序。
我阅读了 list_display 的文档, 但找不到答案。
根据文档,可以使用查询表达式。是否可以这样解决?
应用答案后,这就是它的样子。在这种情况下,每个实例都有 N 个日志条目:
最佳答案
在 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/