【问题标题】:Django admin changelist_viewDjango 管理员更改列表视图
【发布时间】:2016-04-27 18:22:06
【问题描述】:

在 ListView 中,我可以仅从列表中当前查看的对象计算部分值:

    def get_context_data(self, **kwargs):
        """ aggiunge il totale ore """
        context = super(OraListView, self).get_context_data(**kwargs)
        x= self.object_list.aggregate(Sum('durata'))
        context['totale_durata'] = x.get('durata__sum')
        return context

我怎样才能在管理员中获得相同的结果?

class TimeAdmin(admin.ModelAdmin):

   def get_total(self):
        # context = super(OreAdmin, self).get_context_data(**kwargs)
        # x= self.object_list.aggregate(Sum('durata'))
        # total=x.get('durata__sum')
        total="aaaaaaaa"
        return total

    def changelist_view(self, request, extra_context=None):
        my_context = {
            'total': self.get_total(),
        }
        return super(TimeAdmin, self).changelist_view(request,
            extra_context=my_context)

object_list 似乎在管理员中不可用。

【问题讨论】:

    标签: django django-admin django-views


    【解决方案1】:

    你需要一个额外的步骤和一个额外的类:

    from django.contrib.admin.views.main import ChangeList
    
    class TimeChangeList(ChangeList):
        def get_results(self, request):
            super(TimeChangeList, self).get_results(request)
            totals = self.result_list.aggregate(Sum('durata'))
            self.totale_durata = totals['durata__sum']
    
    class TimeAdmin(admin.ModelAdmin):
        def get_changelist(self, request):
            return TimeChangeList
    
    changelist.html:
    
        {{ cl.totale_durata|default:0 }
    

    【讨论】: