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

标签 django django-models django-admin

假设我有一个包含 Publisher 模型外键的 Book 模型。

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

最佳答案

我遇到了同样的问题(我无法更改模型的管理器来添加慢速注释或连接)。这里两个答案的组合有效。 @Andre 非常接近,Django 管理员支持仅为管理员修改查询集,因此在此处应用相同的逻辑,然后使用 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 - 如何将可排序的计数列添加到具有多对一关系的模型的 Django 管理中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491766/

相关文章:

python - Django原始id字段查找有错误的链接

Python pickle 似乎在类内部中断,但在命令行脚本中却没有

python - 在 Django 框架中使用动态模型

Django + PostgreSQL : query returning incorrect results

python - 使用 unicode 文件名上传文件

Django 忽略模型字段

Django:对查询集值使用自定义方法()

python - 如何使用 django 创建多对一关系并将其显示在管理界面中

django - Gunicorn Upstart 文件未启动

django - Django-haystack 使用 Solr 索引列表而不是原始数据