Django Admin,显示相关模型的聚合值

时间:2011-09-01 21:03:26

标签: django django-models django-admin

在单个Django管理模型中,是否可以聚合来自相关对象的字段。

例如,我有一个学生对象,它对测试对象有一个FK。测试对象具有“得分”字段。

我可以在所有学生考试中汇总分数并将其放在admin display_list属性中吗?

1 个答案:

答案 0 :(得分:17)

您可以,例如:

class FixtureAdmin(admin.ModelAdmin): 
    list_display = ["id", "title", "date", "num_fixture_metas_count"]

    def get_queryset(self, request):
        qs = super(FixtureAdmin, self).get_queryset(request)
        return qs.annotate(num_fixture_metas=Count('fixturemeta'))

    def num_fixture_metas_count(self, obj):
      return obj.num_fixture_metas
    num_fixture_metas_count.short_description = 'Fixture Count'
    num_fixture_metas_count.admin_order_field = 'num_fixture_metas'

但是,AFAIK,您无法通过此方法点击管理员在这些字段中的排序,因为从num_fixture_metas.annotate()添加list_display会导致缺少字段错误

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display https://docs.djangoproject.com/en/dev/topics/db/aggregation/