且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2021-09-12 23:46:40

你可以,例如:

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,您不能通过此方法在这些字段的管理员中单击排序,因为将 .annotate() 中的 num_fixture_metas 添加到 >list_display 导致缺少字段错误.

However, AFAIK, you cannot click sort within the admin on these fields via this method, as adding num_fixture_metas from .annotate() to the list_display results in a missing field error.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_displayhttps://docs.djangoproject.com/en/dev/topics/db/聚合/