2016-01-21 172 views
1

在ListView我只能從當前與觀看列表中的對象計算部分值:Django管理changelist_view

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在管理中似乎不可用。

回答

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 }