假设你有一个模型Person,它可以有N个Book示例。我想在django管理变更列表视图中显示一个人拥有的书籍数量。很容易显示数字(在PersonAdmin上编写自定义方法)。但我找不到一种方法,使它排序的书籍数量一个人。我读了list_display的文档,但找不到答案。根据文档,可以使用查询表达式。可以用这种方法解决吗?在应用答案之后,它看起来是这样的。在这种情况下,每个示例都有N个日志条目:
Person
Book
的数据
zlwx9yxi1#
借助**annoate()和order_by()方法,对模型admin的get_queryset()**方法进行重新定义,然后定义一个可调用函数(book_count()),将值返回到更改列表页面
annoate()
order_by()
get_queryset()
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会抛出异常
super()
1条答案
按热度按时间zlwx9yxi1#
借助**
annoate()
和order_by()
方法,对模型admin的get_queryset()
**方法进行重新定义,然后定义一个可调用函数(book_count()),将值返回到更改列表页面字符串
为什么不加**
ordering
**?当我们调用**
super()
**时,Django会抛出异常