Django Admin, Показать совокупные значения из родственной модели - PullRequest
10 голосов
/ 02 сентября 2011

Возможно ли в рамках одной модели администрирования Django агрегировать поля из связанных объектов.

Например, у меня есть объект Student, который имеет FK для объекта Test.Тестовый объект имеет поле «Оценка».

Могу ли я объединить оценки по всем тестам учеников и поместить их в атрибут admin display_list?

1 Ответ

19 голосов
/ 02 сентября 2011

Вы можете, например:

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/

...