【问题标题】:Django Admin, Show Aggregate Values From Related ModelDjango Admin,显示来自相关模型的聚合值
【发布时间】:2011-11-08 17:50:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    例如,您可以:

    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/

    【讨论】:

    • 刚刚添加了在同一字段上排序的选项。
    • 太好了,谢谢。但是如何将“num_fixtures_metas_count”添加到字段而不是list_display??
    • @thnee 以防万一有人过来寻求答案,将 num_fixtures_metas_count 添加到您需要将其放入只读列表的字段中。
    • 你必须覆盖 get_queryset() ,而不是 queryset() docs.djangoproject.com/en/dev/ref/contrib/admin/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2016-04-23
    • 1970-01-01
    • 2021-12-20
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多