如何在具有多对一关系的模型的Django管理员中添加可排序的计数列?

假设我有一个Book模型,其中包含指向Publisher模型的外键。

如何以一种可以使用内置排序的方式在Django admin中显示一列包含每个出版商出版的书籍数量的列?

回答:

我遇到了同样的问题(我无法更改模型的经理来添加慢速注释或联接)。此处两个答案的组合有效。@Andre非常接近,Django Admin支持仅修改admin的查询集,因此在此处应用相同的逻辑,然后使用admin_order_field属性。当然,你仍然需要将新的管理字段添加到list_display。

from django.db.models import Count

class EventAdmin(admin.ModelAdmin)

list_display = (..., 'show_artist_count')

def queryset(self, request):

# def get_queryset(self, request): for Django 1.6+

qs = super(EventAdmin, self).queryset(request)

return qs.annotate(artist_count=Count('artists'))

def show_artist_count(self, inst):

return inst.artist_count

show_artist_count.admin_order_field = 'artist_count'

以上是 如何在具有多对一关系的模型的Django管理员中添加可排序的计数列? 的全部内容, 来源链接: utcz.com/qa/409994.html

回到顶部